在Matlab中求解含参数非线性方程组:添加参数c后如何修改代码?
在Matlab中给含参数的非线性方程组传参的修改方案
给带参数的非线性方程组用fsolve求解,核心是解决参数c的传递问题,同时注意原代码里的一个笔误:第二行的cx(1)应该是c*x(1),否则会报错。下面是两种常用的修改方法:
方法一:通过匿名函数传递参数
这是最直接常用的方式,先修改函数定义让它接收x和c两个参数,再用匿名函数把c绑定后传给fsolve:
% 主脚本部分 c = 1; % 先定义你需要的参数值 x0 = [0,0]; x = fsolve(@(x) myfunc(x,c), x0) %=================== function F = myfunc(x,c) F(1) = 4*c*(c*x(1) - 2)^3 + 2*c*x(2)^2 *(c*x(1)-2); F(2) = 2*x(2)*(c*x(1) - 2)^2 + 2*(x(2)+1); % 修正原代码的笔误 end
方法二:使用嵌套函数
如果你的代码是写在一个主函数里,可以用嵌套函数直接访问外层的c变量,不用显式传参:
function solve_system() c = 1; % 定义参数 x0 = [0,0]; x = fsolve(@myfunc, x0); % 嵌套函数,直接使用外层的c变量 function F = myfunc(x) F(1) = 4*c*(c*x(1) - 2)^3 + 2*c*x(2)^2 *(c*x(1)-2); F(2) = 2*x(2)*(c*x(1) - 2)^2 + 2*(x(2)+1); % 修正笔误 end end
注意事项
- 优先用前两种方法,不推荐用全局变量,全局变量容易导致变量污染,增加调试难度。
内容的提问来源于stack exchange,提问作者taolao
相关产品推荐
相关产品推荐

