MATLAB绘图

MATLAB绘图,matlab,plot,ode,Matlab,Plot,Ode,我有一个代码,我想在里面添加一个额外的绘图。我想画出两个函数的相对误差。我不确定在循环中的何处放置此项,以便它不会给我错误消息,并将所有三种情况绘制为单个图形。此外,我的相对错误代码可能有一些错误,这可能是导致问题的原因 这是相对错误代码: rel_error = (y_exact1 - Y(:,2)')./y_exact; %relative error figure() plot(T,rel_error,'r') 这是我需要添加到的函数 function ivp1() clear;clc

我有一个代码,我想在里面添加一个额外的绘图。我想画出两个函数的相对误差。我不确定在循环中的何处放置此项,以便它不会给我错误消息,并将所有三种情况绘制为单个图形。此外,我的相对错误代码可能有一些错误,这可能是导致问题的原因

这是相对错误代码:

rel_error = (y_exact1 - Y(:,2)')./y_exact; %relative error 
figure()
plot(T,rel_error,'r')
这是我需要添加到的函数

function ivp1()
clear;clc;close all;
t=linspace(0,2.5);
K=[.02 .1 1.5];

for i=1:3
k =K(i);

[T,Y] = ode45(@prblm1_fun,t,0); %Solving for the approximate solution    to the IVP 

figure()
plot(T,Y)
hold on 

y_exact1 = 1/(k^2+pi^2)*(pi*exp(k*t)-pi*cos(pi*t)-k*sin(pi*t));
y_exact2 = 1/(2*k)*(exp(k*(t-1))-1) + pi/(k^2+pi^2)*(exp(k*t) + exp(k* (t-1)));
y_exact3 = 1/2/k*(exp(k*(t-1))-exp(k*(t-2))) + pi/(k^2+pi^2)*(exp(k*t) + exp(k*(t-1))) + 1/2/(k-1)*(exp(k*(t-2)) - exp(t-2));

for i=1:length(t)

if t(i)<1
plot(t(i),y_exact1(i),'mo')
hold on 

elseif t(i)<2
plot(t(i),y_exact2(i),'mo')
hold on

else
plot (t(i),y_exact3(i),'mo')
hold on

end
end
end
function dy= prblm1_fun(t,y) %This is the function of the IVP for     varying values of t 
dy = zeros(1,1); 
if t < 1
dy(1)= y(1)*k + sin(pi*t);
elseif t < 2
dy(1)= y(1)*k + 0.5;
else
dy(1)= y(1)*k + exp(t-2)/2;
end
end
end
函数ivp1()
清楚的clc;全部关闭;
t=linspace(0,2.5);
K=[0.02.11.5];
对于i=1:3
k=k(i);
[T,Y]=ode45(@prblm1_-fun,T,0);%IVP近似解的求解
图(
绘图(T,Y)
等等
y_exact1=1/(k^2+pi^2)*(pi*exp(k*t)-pi*cos(pi*t)-k*sin(pi*t));
y=1/(2*k)*(exp(k*(t-1))-1)+pi/(k^2+pi^2)*(exp(k*t)+exp(k*(t-1));
y=1/2/k*(exp(k*(t-1))-exp(k*(t-2))+pi/(k^2+pi^2)*(exp(k*t)+exp(k*(t-1))+1/2/(k-1)*(exp(k*(t-2))-exp(t-2));
对于i=1:长度(t)
如果t(i)两个错误位置:

1)
Y
是来自
ode45
结果的
100x1
矩阵。试图访问
Y(:,2)
会导致边界外错误

2) 未定义精确的
。您只有
y\u exact1
y\u exact2
y\u exact3

示例代码:

function ivp1()
clear;clc;close all;
t=linspace(0,2.5);
K=[.02 .1 1.5];

for i=1:3
    k =K(i);

    [T,Y] = ode45(@prblm1_fun,t,0); %Solving for the approximate solution    to the IVP

    figure()
    plot(T,Y)
    hold on

    y_exact1 = 1/(k^2+pi^2)*(pi*exp(k*t)-pi*cos(pi*t)-k*sin(pi*t));
    y_exact2 = 1/(2*k)*(exp(k*(t-1))-1) + pi/(k^2+pi^2)*(exp(k*t) + exp(k* (t-1)));
    y_exact3 = 1/2/k*(exp(k*(t-1))-exp(k*(t-2))) + pi/(k^2+pi^2)*(exp(k*t) + exp(k*(t-1))) + 1/2/(k-1)*(exp(k*(t-2)) - exp(t-2));

    for j=1:length(t)
        if t(j)<1
            y_exact = y_exact1(j);
        elseif t(j)<2
            y_exact = y_exact2(j);
        else
            y_exact = y_exact3(j);
        end
        plot(t(j),y_exact,'mo')
    end
    rel_error = (y_exact1 - Y(:,1)')./y_exact; %relative error
    plot(T,rel_error,'r')
end
function dy= prblm1_fun(t,y) %This is the function of the IVP for     varying values of t
dy = zeros(1,1);
if t < 1
    dy(1)= y(1)*k + sin(pi*t);
elseif t < 2
    dy(1)= y(1)*k + 0.5;
else
    dy(1)= y(1)*k + exp(t-2)/2;
end
end
end
函数ivp1()
清楚的clc;全部关闭;
t=linspace(0,2.5);
K=[0.02.11.5];
对于i=1:3
k=k(i);
[T,Y]=ode45(@prblm1_-fun,T,0);%IVP近似解的求解
图(
绘图(T,Y)
等等
y_exact1=1/(k^2+pi^2)*(pi*exp(k*t)-pi*cos(pi*t)-k*sin(pi*t));
y=1/(2*k)*(exp(k*(t-1))-1)+pi/(k^2+pi^2)*(exp(k*t)+exp(k*(t-1));
y=1/2/k*(exp(k*(t-1))-exp(k*(t-2))+pi/(k^2+pi^2)*(exp(k*t)+exp(k*(t-1))+1/2/(k-1)*(exp(k*(t-2))-exp(t-2));
对于j=1:长度(t)

如果t(j),您会收到哪条错误消息?你能附上一张理想结果的图表吗(即使是粗糙的油漆也可以)?@Dev iL我刚刚添加了一些图片