我有一个在MATLAB中生成矢量的代码,例如以下是三分量矢量(n=3
):
a1_1 - sin((17*a1_1)/60 + a2_1/8 + a3_1/40 - 0.153233)
(15*a1_1)/16 + a2_1/4 + a3_1/32 - sin((17*a1_1)/60 + a2_1/8 + a3_1/40 - 0.0282326)
(3*a1_1)/4 + a2_1/2 + a3_1/8 - sin((17*a1_1)/60 + a2_1/8 + a3_1/40 + 0.846767)
您可以看到每个组件都是非线性方程。向量的三个分量形成一个由三个非线性方程组成的系统,其变量名为a1_1
,a1_2
和a1_3
。我想通过fsolve
来解决这个系统。
如何对任意n
执行此操作?
答案 0 :(得分:1)
要使用fsolve
,您的函数必须接受向量输入并返回相同大小的向量。在您的情况下,您可以使用anonymous function:
f = @(a)[a(1) - sin(17*a(1)/60 + a(2)/8 + a(3)/40 - 0.153233);...
15*a(1)/16 + a(2)/4 + a(3)/32 - sin(17*a(1)/60 + a(2)/8 + a(3)/40 - 0.0282326);...
3*a(1)/4 + a(2)/2 + a(3)/8 - sin(17*a(1)/60 + a(2)/8 + a(3)/40 + 0.846767)];
n = 3;
a0 = zeros(n,1); % Initial guess
opts = optimoptions('fsolve','Display','iter','TolFun',1e-8);
[a_sol,a_val,exitflag] = fsolve(f,a0,opts)
返回
a_sol =
-0.002818738864459
-0.687953796565011
9.488284986072076
当然可能有多个解决方案,特别是对于较大的n
。您可以选择初始猜测来查找其他人。有关指定选项的详细信息,请参阅fsolve
和optimoptions
的文档。
答案 1 :(得分:0)
您是否尝试使用solve
命令?
[y1,...,yN] = solve(eqns,vars)求解变量vars的方程组eqns。解决方案分配给变量y1,...,yN。如果未指定变量,则使用symvar查找要求解的变量。在这种情况下,symvar找到的变量数等于输出参数数N。