deval函数_Matlab求解微分方程并画图

本文介绍了如何在Matlab中利用deval函数求解一阶线性微分方程,并结合ode45函数进行数值解的计算。通过创建solveFcn.m和odefunc.m文件,定义微分方程,然后在main_0.m文件中调用deval计算不同初始条件下的解,最终绘制出解的图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

展开全部

^

看标题以为你要求微分方程呐,结果是32313133353236313431303231363533e58685e5aeb931333363396464画dR/dr vs. r% 画出图中的公式

% 定义微分方程函数

dRdr = @(r) 0.89 ./ r .* exp(-(log(r) + 0.84).^2 / 0.086);

% 在(0, 10]上画图

r = linspace(0.01, 3, 500);

dR = dRdr(r);

figure(10);

plot(r, dR, '^b', 'MarkerFaceColor', 'blue', 'DisplayName', 'dR/dr vs r');

xlabel('r', 'FontSize', 16);

ylabel('dR/dr', 'FontSize', 16);

legend('show');

作图的结果是

-----------------如果要求解微分方程的话-------------------------

这是一个一阶线性微分方程, 可以用龙格库塔求解. 首先用一个.m文件

定义图中的微分方程. 然后再用matlab的ode45函数求解这个方程.

举个例子, 建立一个solveFcn.m的文件如下% 调用MATLAB的`ode45`函数实现求解. 具体说明在

% MATLAB命令行中输入`doc ode45`查询.

% 简单来说, 需要两步. 1) 微分方程定义; 2) ode45参数设置和调用.

% 具体如下.

% 设置ode45参数, 并调用求解微分方程`DR = odefunc(r, R)`. 该方程定义

% 见后一个函数.

function Solution = solveFcn(initial_value)

% initial_value = [r0, R0];

r0 = initial_value(1);

R0 = initial_value(2);

% 由于提供的初值[r0 R0] = [0.43 0.5]; 或 [0.55 0.9]. 如果求解区间从(0, 10]

% 那么需要分成(0 r], [r, 10]两部分求解.

% [r0, 10]上求解

sol1 = ode45(@odefunc, [r0 10], R0);

% (0, r0]上求解

sol2 = ode45(@odefunc, [r0 0.01], R0); % log(r)在0处inf, 所以用0.01代替.

% sol结构体是微分方程的解, 包含`r` - 自变量, `R` - 要求解的函数R(r)

% 的数值. 其它r对应的R值, 可以用 `R = deval(sol, r);`计算. 其结果与

% sol中存储的r, R(r)相对精度一致.

Solution.sol1 = sol1;

Solution.sol2 = sol2;

end

% 定义微分方程. 用DR表示dR/dr. 一阶线性微分方程的一般形式为DR = f(r, R)

% 尽管题目微分方程右边未出现R, 此变量也不可省略.

function DR = odefunc(r, R)

DR = 0.89 ./ r .* exp(-(log(r) + 0.84).^2 / 0.086);

end

这个函数的作用就是求解最后几行定义的 dR/dr = f(r, R)这个微分方程. 解存在sol结构体中.(这个例子是在sol1和sol2里面)

怎么用这个sol解具体算每个r处的R呢, 需要用到deval. 可以再建立一个main_0.m文件, 内容为% 调用函数sovleFcn. 求解微分方程

% 初值 r= 0.43, R = 0.5

S1 = solveFcn( [0.43 0.5] );

% 绘图

r1 = linspace(0.01, 0.43, 50);

R1 = deval(S1.sol2, r1);

r2 = linspace(0.43, 2, 50);

R2 = deval(S1.sol1, r2);

r = [r1, r2];  % 在 0.01 - 2上的解

R = [R1, R2]; % 在 0.01 - 2上的解

figure(1); hold on;

plot(r, R, 'b-', 'linewidth',2, 'DisplayName', 'r=0.43, R=0.5');

% 初值 r=0.55, R = 0.9

S2 = solveFcn( [0.55 0.9] );

% 绘图

r1 = linspace(0.01, 0.55, 50);

R1 = deval(S2.sol2, r1);

r2 = linspace(0.55, 2, 50);

R2 = deval(S2.sol1, r2);

r = [r1, r2];  % 在 0.01 - 2上的解

R = [R1, R2]; % 在 0.01 - 2上的解

figure(1); hold on;

plot(r, R, 'r-', 'linewidth',2, 'DisplayName', 'r=0.55, R=0.9');

legend('show')

xlabel('r', 'FontSize', 16);

ylabel('\int_0^r dR', 'FontSize', 16)

那么这个微分方程在不同的初值条件下的解, 就可以画成下图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值