matlab求解非线性方程组(如何用matlab求解非线性微分方程组)

本文目录
如何用matlab求解非线性微分方程组
使用符号运算工具。
首先定义变量符号
syms s x t;
使用字符串定义公式
eq1 = ’diff(x, t) = 0.11*s*x/(0.06*x+s)’;
eq2 = ’diff(s, t) = (-1)*0.029*x-0.234*s/(0.006*x+s)-s/(30*s^2+300*s+0.03)’;
接下来是求解 比如现在要求解s,下面的代码可以给出s的表达式
solution = solve(eq1, eq2, s);
接下来求值
首先给变量赋值
x = 1;
t = 1;
之后运行
result = eval(solution);
可以求出解。
我现在写出的代码可能有错误,不过思路是这样的。我没调试。详细情况可以搜索 matlab 符号运算。
求一道用matlab编程解非线性方程组
对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为: X=fsolve(’fun’,X0,option) 其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。optimset(‘Display’,‘off’)将设定Display选项为‘off’。 例如:求下列非线性方程组在(0.5,0.5) 附近的数值解。 (1) 建立函数文件myfun.m。 function q=myfun(p) x=p(1); y=p(2); q(1)=x-0.6*sin(x)-0.3*cos(y); q(2)=y-0.6*cos(x)+0.3*sin(y); (2) 在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。 x=fsolve(’myfun’,’,optimset(’Display’,’off’)) x = 0.6354 0.3734 将求得的解代回原方程,可以检验结果是否正确,命令如下: q=myfun(x) q = 1.0e-009 * 0.2375 0.2957 可见得到了较高精度的结果。
matlab解多元非线性方程组,要求整数解
1.solve
格式:(1)Y = solve(eqns,vars)
(2) = solve(eqns,vars)
先解释两个参数吧,
①eqns就是你的方程组,方程组里面的各个方程是组织为一个数组的。
所以你可以直接使用 对应于eqns输入参数。
也可以后面会将到,将eqns声明为一个数组,然后带入eqns输入即可,这样方便。
②vars就是你想要返回的求得的未知变量,如果你不明确指定,那他就会按照sym的对应。
③返回值,有两种。Y代表一个结构体,将返回的变量通通放入结构体Y里面,然后访问和C语言的结构体一样,假设Y下面有两个成员,y1,y2,
你直接Y不会显示里面的值,要Y.y1 Y.y2才能显示。
就是直接对应于vars里面你直接想要求得的值,如果没有明确指定vars就按默认对应。
注:(1)vars如果你不明确指定的话,在参数少的时候也容易分清返回自己想要的,但是如果参数过多还是最好明确指定自己想要的参数。
(2)Y和两种返回赋值方式各有优缺点,Y你访问里面的元素的话比较麻烦,
这种情况如果N有几十个,你这样输入很烦,而这个时候全部存入Y中,再用一个for循环遍历就能存入一个向量中了。
(3)然而突然发现,在结构体中的元素并不能使用下标来遍历,目前还在纠结中。。。
2.sym
先讲下这个函数用来干什么的,在matlab中,你可以直接用变量,但是你必须要赋值。
比如你想要输入a=b+c;
你的a和b首先要初始化,即b和c是要有值的。
那么问题就来了,我求解方程的时候就是不知道未知数才求解,如何赋值呢?
这个时候就需要使用sym声明符号变量了。它声明的未知量不用赋值。
格式:A = sym(’a’,)
这个的意思就是说,生成一个m,n维的矩阵A,然后它的每一个元素用a来标识。
注意:用a的标识是它标识矩阵内部的元素,你要使用该未知量还是需要按照正常的矩阵元素访问方法,比如A(1,2)这样。
环境:matlab2015a
函数:Symbolic Math Toolbox里面的sym和solve函数。其中sym在第一个红框中,solve在第二个红框中。
(急求)关于用matlab求解非线性微分方程组的问题
没解析解你肯定得用数值解。以下是步骤。
第一步,在matlab里写m-file,命名微分方程对应的函数:
function
f=myfun(t,x)
f
=
[-x(1)+x(2)^2;
-2*x(2)+x(1)^2];
这里的x(1)就是你这儿的x,
x(2)就是你这儿的y。写完后自动保存,不要对保存目录做任何修改,文件名就叫myfun.m。
第二步,在matlab命令窗口里写命令:
s=;
=ode45(’myfun’,s,x0);
plot(x(:,1),x(:,2))
就完了。第一行是在设置画图的范围,s就是画图的区间,0.01是步长,0和10是t的起点和终点,这些你都可以自行设定(步长越小图形越精确),x0是初始值;第二行是在解微分方程,t为自变量(注意在上一步定义函数的时候一定要把t也定义进去,不然matlab不会认为这是个微分方程);第三行就是画相图了。
方程的解就保存在变量t和x里,s里面有多少个点你就会得到多少个x和y。

更多文章:
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50
perl数组中最多的元素(用perl实现,得到一个数组中重复次数最多的元素)
2026年10月10日 17:00
oracle11g端口映射客户端频繁掉线(oracle本地进行连接的时候报错ORA-12560: TNS: 协议适配器错误)
2026年10月10日 16:10






