
>> y=dsolve('D2y+5Dy+6y=2','y(0)=exp(-2t)','Dy(0)=-1','x')
y =
(3/exp(2t) - 2)/exp(2x) - (2/exp(2t) - 5/3)/exp(3x) + 1/3
一般用matlab求解方程有两种方法:1、用软件自带的solve()函数、fsolve()函数、roots()函数等;2、利用数值分析的方法(如二分法,牛顿法等)自行编程其数值函数。
所以,要根据具体的方程形式来选择合适的求解函数。请给以把具体的方程贴出来,以便于帮助你。
如何使用matlab编程求出图中方程的解,对于图中的方程用solve()和vpasolve()函数求解,并不能让我们得到所有的解。那如何去得到呢?
首先,我们试着用绘制函数(ezplot,plot),绘出其图形,此时我们可以看到,该方程有两个解,即x在0和15的附近有解。
然后,用vpasolve函数一个一个地去求。
实现代码:
syms x
ezplot(sin(x)-x^2/2,[-5,5]) %绘图
grid on %打网格线
x1 = vpasolve(sin(x)-x^2/2 == 0, x , 0) %求x在0附近的解
x2 = vpasolve(sin(x)-x^2/2 == 0, x , 15) %求x在15附近的解
执行结果如图所示。
1、对于简单的三角方程,可以用solve()来求解,得到解析解。如 其求解代码和结果为 2、对于复杂的三角方程,可以用Broyden(拟牛顿法)等方法来求解,得到数值解。如 其求解过程如下 ①建立自定义函数文件,funm。m function y = funm(x) %x=x(1,1),y=x(2,1) y(1,1) = x(1,1) - 07 sin(x(1,1)) - 02 cos(x(2,1)); y(2,1) = x(2,1) - 07 cos(x(1,1)) + 02 sin(x(2,1)); end ②编写Broyden文件,Broyden。m ③在命令窗口输入
x = (-5:02:5);y1=besselj(1,x);y2=01ones(size(x));plot(x,y1,x,y2)
用上面的语句,画出图形,在图形中用data cursor选中交点,可得三点坐标(-42,01),(02,01),(36,01),这样就可得到x值
贝塞尔函数(Bessel functions)是数学上的一类特殊函数的总称。通常单说的贝塞尔函数指第一类贝塞尔函数(Bessel function of the first kind)。贝塞尔函数也被称为柱谐函数、圆柱函数或圆柱谐波,因为是于拉普拉斯方程在圆柱坐标上的求解过程中被发现的。
fun=@(x,y)ylog10(y)-x创建关于x,y的匿名函数
log10(x)由于Matlab中自然对数的符号是log(与我们数学上的不同),以10为底的对数符号是log10,同理有log2,但是没有log3等哦
vpa将得到的符号解转化为指定精度的小数,比如vpa('sqrt(2)',10)将sqrt(2)表示10位精度的小数
fzero是Matlab求解一元函数零点的内置函数
fsolve是Matlab中求解方程组解(可以求解复数)的内置函数,功能强于fzero
fval是返回fun(x)的值,也就是说fzero和fsolve返回方程的解x,那么此时的fun(x)就是fval
这个方法比较多 可以数值也可以解析求解
1解析求解
>> solve('ylog10(y)=3','y')
ans =
3log(10)/lambertw(3log(10))
>> vpa(ans)
ans =
45555357051951280236911974082484
2数值解法这个可以使用fsolve和fzero,前者的功能更加强大,但是对于这个问题fzero就可以了
>>x=3;
>>fun=@(y)ylog10(y)-x;
%使用fsolve
>> [x,fval]=fsolve(fun,rand)
Optimization terminated: first-order optimality is less than optionsTolFun
x =
45555
fval =
39620e-008
%使用fzero
>> [x,fval]=fzero(fun,5)
x =
45555
fval =
-88818e-016
a0 = 1;
a1 = 1;
a2 = 1;
a3 = 1;
a4 = 1;
a5 = 1;
x = [3,5,7,11,14,22,33,35];
y = [4,6,8,12,15,23,31,36];
H = a0 + a1x + a2y +a3xy + a4x^2 + a5y^2
plot(x,H)
H= 45 103 185 421 661 1565 3138 3853
在MATLAB中,我们可以通过定义一个方程和使用数值求解器来求解这个方程。已知一阶导数和二阶导数,我们可以将方程表示为常微分方程(ODE)。为了求解x(t),我们可以使用MATLAB的ode45函数。
首先,将方程用MATLAB代码表示:
function dxdt = myODE(t, x, F0, omega_L, omega)
dxdt = zeros(2,1);
dxdt(1) = x(2);
dxdt(2) = F0 cos(omega t) - F0/omega (sin(omega_L t) - sin(omega_L ti));
end
接下来,定义已知参数:
F0 = 1; % 代替具体的值
omega_L = 1; % 代替具体的值
omega = 1; % 代替具体的值
ti = 1; % 代替具体的值
现在,使用ode45函数求解ODE:
tspan = [0, 10]; % 代替具体的时间范围
x0 = [0; 0]; % 初始条件(位置和速度)
[t, x] = ode45(@(t, x) myODE(t, x, F0, omega_L, omega), tspan, x0);
在这里,tspan是时间范围,x0是初始条件。ode45函数将返回时间向量t和位置(x(1))及速度(x(2))的解。
注意:在表达式中使用了变量,因为这是MATLAB代码的标准表示方法。您可以根据实际情况修改变量名称以符合您的要求。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)