用fsolve求解非线性方程

3次查看(最近30天)
Shubham
Shubham 2021年2月2日
函数F = root2d(φ)
F = 0 (2, 1);
F(1) =(π* sin((π*(φ(1)+ theta_n)) / 180) * cos((π*φ(2))/ 180)* (cos((π* theta_n) / 180) +棕褐色((π*我)/ 180)* tan((π* theta_i) / 180))) / (180 * sin((π*φ(1))/ 180)* (cos((π*(φ(1)+ theta_n)) / 180) * cos((φ(2)*π)/ 180)+罪((φ(2)*π)/ 180)* tan ((theta_i *π)/ 180))^ 2)——(π* cos((π*φ(1))/ 180)* (cos((π* theta_n) / 180) +谭((π*我)/ 180)* tan((π* theta_i) / 180))) /(180 *罪((φ(1)*π)/ 180)^ 2 * (cos((π*(φ(1)+ theta_n)) / 180) * cos((π*φ(2))/ 180)+罪((π*φ(2))/ 180)* tan((π* theta_i) / 180)));
F (2) = ((cos((π* theta_n) / 180) +棕褐色((π*我)/ 180)* tan((π* theta_i) / 180)) *((π* cos((π*(φ(1)+ theta_n)) / 180) *罪((π*φ(2))/ 180))/ 180(π* cos((π*φ(2))/ 180)* tan((π* theta_i) / 180)) / 180)) /(罪((π*φ(1))/ 180)* (cos((π*(φ(1)+ theta_n)) / 180) * cos((φ(2)*π)/ 180)+罪((φ(2)*π)/ 180)* tan ((theta_i *π)/ 180))^ 2);
结束
beta_a = 10;
Alpha_n = 10;
η= 18;
我= 18;
theta_i = 10;
= 10;
有趣= @root2d;
phi0 = (0,0);
φ= fsolve(有趣,phi0);
phi_n =φ(1);
phi_i =φ(2);
我得到错误:
未被认可的函数或变量'theta_n'。
错误在root2d(第4行)
F(1) =(π* sin((π*(φ(1)+ theta_n)) / 180) * cos((π*φ(2))/ 180)* (cos((π* theta_n) / 180) +
谭((π*我)/ 180)* tan((π* theta_i) / 180))) /(180 *罪((π*φ(1))/ 180)* (cos((π*(φ(1)+
theta_n)) / 180) * cos((φ(2)*π)/ 180)+罪((φ(2)*π)/ 180)* tan ((theta_i *π)/ 180))^ 2)
(π* cos((π*φ(1))/ 180)* (cos((π* theta_n) / 180) +
谭((π*我)/ 180)* tan((π* theta_i) / 180))) /(180 *罪((φ(1)*π)/ 180)^ 2 * (cos((π*(φ(1)+
theta_n)) / 180) * cos((π*φ(2))/ 180)+罪((π*φ(2))/ 180)* tan((π* theta_i) / 180)));
错误在fsolve(第258行)
熔化炉=函数宏指令(funfcn {3}, x,变长度输入宗量{:});
错误在最近(第12行)
φ= fsolve(有趣,phi0);
引起的由:
失败在初始目标函数评估中。FSOLVE无法继续。
1评论
马特·J
马特·J 2021年2月2日
如果您使用了这种方法,您的代码将更具可读性(因此也更容易调试) cosd (x) 信德(x) 而不是 因为(π* x / 180) 罪(π* x / 180)。

登录评论。

接受的答案

马特·J
马特·J 2021年2月2日
编辑:马特·J 2021年2月2日
你不能通过 theta_n 和root2d()的其他参数。一个修复方法是让root2d为a 嵌套函数 .同样,你必须选择一个不同的起始点。 phi0 = (10,10) 为我工作。
函数solve_it ()
beta_a = 10;
Alpha_n = 10;
η= 18;
我= 18;
theta_i = 10;
= 10;
有趣= @root2d;
phi0 = (10,10);
φ= fsolve(有趣,phi0);
phi_nφ= (1),
phi_iφ= (2),
函数F = root2d(φ)
F = 0 (2, 1);
F(1) =(π* sin((π*(φ(1)+ theta_n)) / 180) * cos((π*φ(2))/ 180)* (cos((π* theta_n) / 180) +棕褐色((π*我)/ 180)* tan((π* theta_i) / 180))) / (180 * sin((π*φ(1))/ 180)* (cos((π*(φ(1)+ theta_n)) / 180) * cos((φ(2)*π)/ 180)+罪((φ(2)*π)/ 180)* tan ((theta_i *π)/ 180))^ 2)——(π* cos((π*φ(1))/ 180)* (cos((π* theta_n) / 180) +谭((π*我)/ 180)* tan((π* theta_i) / 180))) /(180 *罪((φ(1)*π)/ 180)^ 2 * (cos((π*(φ(1)+ theta_n)) / 180) * cos((π*φ(2))/ 180)+罪((π*φ(2))/ 180)* tan((π* theta_i) / 180)));
F (2) = ((cos((π* theta_n) / 180) +棕褐色((π*我)/ 180)* tan((π* theta_i) / 180)) *((π* cos((π*(φ(1)+ theta_n)) / 180) *罪((π*φ(2))/ 180))/ 180(π* cos((π*φ(2))/ 180)* tan((π* theta_i) / 180)) / 180)) /(罪((π*φ(1))/ 180)* (cos((π*(φ(1)+ theta_n)) / 180) * cos((φ(2)*π)/ 180)+罪((φ(2)*π)/ 180)* tan ((theta_i *π)/ 180))^ 2);
结束
结束
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年2月2日
马特已经告诉你问题所在和解决方法了。

登录评论。

更多的答案(0)

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!