搜索内容 搜索用户

# [已解决] 在使用fsolve解多元非线性方程的时候，出现FSOLVE requires all values returned by user functions to be of data type double.

littleboat007 发表于 2022-11-16 22:00:58
 我的定义函数为： function R = R10d(B1,B2,B3,B4,B5,B6,B7,B8,C3, C4) syms  B1 B2 B3 B4 B5 B6 B7 B8  C3 C4 km=33.55; kb= 2; Ef= 8.3; If=7.95; C1=0; C2=0; m=(km/(4*Ef*If))^(1/4); b = ((km + kb)/(4*Ef*If))^(1/4); R(1)= -2*Ef*If*m^3*(B2 - B3); R(2)= B1*cos(100*m)*cosh(100*m) + B2*cosh(100*m)*sin(100*m) + B3*cos(100*m)*sinh(100*m) + B4*sin(100*m)*sinh(100*m)-1; R(3)= B5*cos(100*m)*cosh(100*m) + B6*cosh(100*m)*sin(100*m) + B7*cos(100*m)*sinh(100*m) + B8*sin(100*m)*sinh(100*m)-1; R(4)= m*(2*B1*((cos(100*m)*sinh(100*m))/2 - (cosh(100*m)*sin(100*m))/2) + B2*(B3*(cos(100*m)*cosh(100*m) - sin(100*m)*sinh(100*m)) + 2*B4*((cos(100*m)*sinh(100*m))/2 + (cosh(100*m)*sin(100*m))/2) + cos(100*m)*cosh(100*m) + sin(100*m)*sinh(100*m))) - m*(B6*(cos(100*m)*cosh(100*m) + sin(100*m)*sinh(100*m)) + B7*(cos(100*m)*cosh(100*m) - sin(100*m)*sinh(100*m)) + 2*B5*((cos(100*m)*sinh(100*m))/2 - (cosh(100*m)*sin(100*m))/2) + 2*B8*((cos(100*m)*sinh(100*m))/2 + (cosh(100*m)*sin(100*m))/2)); R(5)= 2*Ef*If*m^2*(B8*cos(100*m)*cosh(100*m) + B6*cos(100*m)*sinh(100*m) - B7*cosh(100*m)*sin(100*m) - B5*sin(100*m)*sinh(100*m)) - 2*Ef*If*m^2*(B4*cos(100*m)*cosh(100*m) + B2*cos(100*m)*sinh(100*m) - B3*cosh(100*m)*sin(100*m) - B1*sin(100*m)*sinh(100*m)); R(6)= B5*cos(101*m)*cosh(101*m) + B6*cosh(101*m)*sin(101*m) + B7*cos(101*m)*sinh(101*m) + B8*sin(101*m)*sinh(101*m); R(7)= C1*(cos(101*b)*cosh(101*b) + cos(101*b)*sinh(101*b)) + C3*(cos(101*b)*cosh(101*b) - cos(101*b)*sinh(101*b)) + C2*(cosh(101*b)*sin(101*b) + sin(101*b)*sinh(101*b)) + C4*(cosh(101*b)*sin(101*b) - sin(101*b)*sinh(101*b)); R(8)= m*(B6*(cos(101*m)*cosh(101*m) + sin(101*m)*sinh(101*m)) + B7*(cos(101*m)*cosh(101*m) - sin(101*m)*sinh(101*m)) + 2*B5*((cos(101*m)*sinh(101*m))/2 - (cosh(101*m)*sin(101*m))/2) + 2*B8*((cos(101*m)*sinh(101*m))/2 + (cosh(101*m)*sin(101*m))/2)) - b*(C2*(cos(101*b)*cosh(101*b) + cos(101*b)*sinh(101*b) + cosh(101*b)*sin(101*b) + sin(101*b)*sinh(101*b)) + C1*(cos(101*b)*cosh(101*b) + cos(101*b)*sinh(101*b) - cosh(101*b)*sin(101*b) - sin(101*b)*sinh(101*b)) - C3*(cos(101*b)*cosh(101*b) - cos(101*b)*sinh(101*b) + cosh(101*b)*sin(101*b) - sin(101*b)*sinh(101*b)) + C4*(cos(101*b)*cosh(101*b) - cos(101*b)*sinh(101*b) - cosh(101*b)*sin(101*b) + sin(101*b)*sinh(101*b))); R(9)= 2*Ef*If*b^2*(C2*(cos(101*b)*cosh(101*b) + cos(101*b)*sinh(101*b)) - C4*(cos(101*b)*cosh(101*b) - cos(101*b)*sinh(101*b)) - C1*(cosh(101*b)*sin(101*b) + sin(101*b)*sinh(101*b)) + C3*(cosh(101*b)*sin(101*b) - sin(101*b)*sinh(101*b))) - 2*Ef*If*m^2*(B8*cos(101*m)*cosh(101*m) + B6*cos(101*m)*sinh(101*m) - B7*cosh(101*m)*sin(101*m) - B5*sin(101*m)*sinh(101*m)); R(10)= 2*Ef*If*m^3*(C2*(cos(101*b)*cosh(101*b) + cos(101*b)*sinh(101*b) - cosh(101*b)*sin(101*b) - sin(101*b)*sinh(101*b)) - C1*(cos(101*b)*cosh(101*b) + cos(101*b)*sinh(101*b) + cosh(101*b)*sin(101*b) + sin(101*b)*sinh(101*b)) + C3*(cos(101*b)*cosh(101*b) - cos(101*b)*sinh(101*b) - cosh(101*b)*sin(101*b) + sin(101*b)*sinh(101*b)) + C4*(cos(101*b)*cosh(101*b) - cos(101*b)*sinh(101*b) + cosh(101*b)*sin(101*b) - sin(101*b)*sinh(101*b))) - 2*Ef*If*m^3*(B6*(cos(101*m)*cosh(101*m) - sin(101*m)*sinh(101*m)) - B7*(cos(101*m)*cosh(101*m) + sin(101*m)*sinh(101*m)) - 2*B5*((cos(101*m)*sinh(101*m))/2 + (cosh(101*m)*sin(101*m))/2) + 2*B8*((cos(101*m)*sinh(101*m))/2 - (cosh(101*m)*sin(101*m))/2)); end 计算为： [size=13.3333px]fun = @R10d; [size=13.3333px]x0 = [0,0,0,0,0,0,0,0,0,0,0]; [size=13.3333px]options=optimoptions('fsolve','display','iter'); [size=13.3333px]x = fsolve(fun,x0,options) [size=13.3333px] [size=13.3333px]出现： [size=13.3333px] [size=13.3333px]FSOLVE requires all values returned by functions to be of data type double. [size=13.3333px] [size=13.3333px]该如何解决？

TouAkira 发表于 2022-11-17 10:25:52
 littleboat007 发表于 2022-11-16 21:47 大佬，可是我去掉syms B1 B2 B3 B4 B5 B6 B7 B8  C3 C4之后提示输入参数的数目不足，这是该怎么办呢？而 ... 照着2楼改呀，我都写给你了 function R = R10d( Input ) 而不是你原来的 function R = R10d(B1,B2,B3,B4,B5,B6,B7,B8,C3, C4)

6 条回复

## 倒序浏览

TouAkira 发表于 2022-11-17 07:56:51
 语法有问题。MATLAB不是c语言等必须先声明一个变量才能接着使用的语言，尤其是数值计算时，不要画蛇添足写syms  B1 B2 B3 B4 B5 B6 B7 B8  C3 C4  这种语句。 function R = R10d( Input ) B1 = Input( 1 ); B2 = Input( 2 ); B3 = Input( 3 ); B4 = Input( 4 ); B5 = Input( 5 ); B6 = Input( 6 ); B7 = Input( 7 ); B8 = Input( 8 ); C3 = Input( 9 ); C4 = Input( 10 ); km=33.55; % 删掉syms声明。后面照抄

littleboat007 发表于 2022-11-17 09:47:08
 TouAkira 发表于 2022-11-17 07:56 语法有问题。MATLAB不是c语言等必须先声明一个变量才能接着使用的语言，尤其是数值计算时，不要画蛇添足写s ... 大佬，可是我去掉syms B1 B2 B3 B4 B5 B6 B7 B8  C3 C4之后提示输入参数的数目不足，这是该怎么办呢？而且B1 B2 B3 B4 B5 B6 B7 B8  C3 C4这几个是要求的未知变量，无法输入，只有 km=33.55; kb= 2; Ef= 8.3; If=7.95; C1=0; C2=0; 几个才是已知的，可以通过input输入

TouAkira 发表于 2022-11-17 10:25:52
 littleboat007 发表于 2022-11-16 21:47 大佬，可是我去掉syms B1 B2 B3 B4 B5 B6 B7 B8  C3 C4之后提示输入参数的数目不足，这是该怎么办呢？而 ... 照着2楼改呀，我都写给你了 function R = R10d( Input ) 而不是你原来的 function R = R10d(B1,B2,B3,B4,B5,B6,B7,B8,C3, C4)

littleboat007 发表于 2022-11-17 19:55:45
 TouAkira 发表于 2022-11-17 10:25 照着2楼改呀，我都写给你了 function R = R10d( Input ) 而不是你原来的 感谢大佬，做出来了，不过这个初始值实在是太难定了，我打算试试1stopt

 你好，方便留个联系方式吗

Joycelin 发表于 2022-11-22 19:14:24
 :)::):):):):)
 您需要登录后才可以回帖 登录 | 注册 本版积分规则 回帖后跳转到最后一页