matlab中如何才能编一个多元函数文件使其既能被ode解微分方程,又能被fsolve解代数方程?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中如何才能编一个多元函数文件使其既能被ode解微分方程,又能被fsolve解代数方程?相关的知识,希望对你有一定的参考价值。
例如代数方程x1+x2-3=0
x1x2-2=0
用fsolve求解的话,先写一M文f
function y=f(x)
y(1)=x(1)+x(2)-3;
y(2)=x(1)*x(2)-2;
再调用[x,fval]=fsolve(@f,[初值])
再如微分方程x1'=x1+x2-3
x2'=x1x2-2
用ode求解先写一M文件f
function dx=f(t,x)
dx=zeros(2,1);
dx(1)=x(1)+x(2)-3;
dx(2)=x(1)*x(2)-2;
再调用ode
sol=ode45(@f,[时间],[初值])
此M文件比上面那个多了一个输入宗量t,而内容完全一样,问怎样才能统一写成一个而既能被fsolve调用又能被
ode调用?可以的话给个例子。
如
function g=f(x,t)
%your equations
matlab二元非线性拟合?
有多条曲线,每条曲线是代表y在某一定值下z = f(x)的曲线,y有对应的几个值,就有几条曲线,如何拟合一个二元函数z = f(x,y),能够表达这种多曲线的数值关系。具体见附图,具体意思就是如何将图中的5条曲线拟合成图中左下角的公式
直接把下面的代码复制到M文件编辑器中保存运行即可。需要说明的是,拟合问题和初值关系很大,我这里给的初值是经过多次调整得到的。
目前得到的结果是[a,b,c,d]=[14678.3 -0.1447 14681.2 0.436]
结果应该还有可能进一步提高,例如可以修改优化算法设置的TolFun参数为更小的值。
function zd499535361
% x0 = [1 1 1 1];
x0 = [1.47E4 -0.15 1.47E4 0.44];
opt = optimset('MaxFunEvals', 1E4, 'MaxIter', 5E4);
x = lsqcurvefit(@f,x0,[X;Y],Z,[],[],opt);
a = x(1)
b = x(2)
c = x(3)
d = x(4)
% 绘图比较拟合结果和原始数据
z = a*X.^b + c*Y.^d;
plot(Z, '.-')
hold on
plot(z, 'ro')
function F = f(x, xdata)
a = x(1);
b = x(2);
c = x(3);
d = x(4);
x = xdata(1, :);y = xdata(2, :);
F = a*x.^b + c*y.^d; 参考技术A MATLAB 中进行非线性最小二乘拟合的函数为:lsqnonline 函数和 lsqcurvefit 函数。 帮助文档中的解释为: lsqcurvefit: Solve nonlinear curve-fitting (data-fitting) problems in least-squares sense(非线性曲线拟合)。 但是这两个函数本质上是一样的,他们用的默认算法都是:trust-region-reflective,并且都可以修改为:levenberg-marquardt algorithm(详见MATLAB中的帮助文档)。 这两个函数的不同在于 lsqcurvefit 的使用形式要更简单一点。 下面将结合MATLAB中的帮助文档,简单介绍这两个函数的使用方法
以上是关于matlab中如何才能编一个多元函数文件使其既能被ode解微分方程,又能被fsolve解代数方程?的主要内容,如果未能解决你的问题,请参考以下文章
C语言编程输出1~1000内既能被3整除又能被7整除的数的和
matlab的非线性优化问题,我自己编了一下,有问题,我把我的程序发上来,希望大虾帮我看下,谢了