Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 用绝对值解微分方程_Matlab_Differential Equations - Fatal编程技术网

Matlab 用绝对值解微分方程

Matlab 用绝对值解微分方程,matlab,differential-equations,Matlab,Differential Equations,我想解这个方程: x'=-A.x+B.| sin(100*pi*t)| 我使用的ode45如下: function find_x t = 0:0.001:10; x0 = 0; R1 = 90000; R2 = 1000; C = 0.001; [t,x]=ode45(@rhs, t , x0); plot(t,x); function dxdt = rhs(t,x) dxdt = -(C/R1 + C/R2)*x + C/R1*abs(sin(100*pi*t))

我想解这个方程: x'=-A.x+B.| sin(100*pi*t)| 我使用的ode45如下:

function find_x
t = 0:0.001:10;
x0 = 0;
R1 = 90000;
R2 = 1000;
C = 0.001;
[t,x]=ode45(@rhs, t , x0);

plot(t,x);

    function dxdt = rhs(t,x)
        dxdt = -(C/R1 + C/R2)*x + C/R1*abs(sin(100*pi*t)) ;
        %It's form is dx/dt = -A.x + B.U(t)
    end
end
但我认为它给了我错误的答案。 实际上,我从一个问题中得到了这个方程,“在二极管电桥和电容器之后找到输出电压形式”,如下所示:


有人能给我建议另一种解决方法吗?谢谢。

这不是解决这个问题的好地方,这让我回到了我的信号与系统时代,但基本上你的方程应该用C作为除法器

记住它是

I = C *dV/dt
因此,如果您在RHS上有dV/dt,您应该期望在LHS上看到1/C:

function khan
t = 0:0.001:10;
x0 = 0;
R1 = 90000;
R2 = 1000;
C = 0.001;
options = odeset('RelTol',1e-6,'AbsTol',1e-8);
[t,x]=ode45(@rhs, t , x0,options);

plot(t,x);

    function dxdt = rhs(t,x)
        dxdt = -(1/R1 + 1/R2)*x/C + 1/R1*abs(sin(100*pi*t))/C ;
        %It's form is dx/dt = -A.x + B.U(t)
    end
end

这不是解决这个问题的好地方,这让我回到了我的信号与系统时代,但基本上你的方程应该用C作为除法器

记住它是

I = C *dV/dt
因此,如果您在RHS上有dV/dt,您应该期望在LHS上看到1/C:

function khan
t = 0:0.001:10;
x0 = 0;
R1 = 90000;
R2 = 1000;
C = 0.001;
options = odeset('RelTol',1e-6,'AbsTol',1e-8);
[t,x]=ode45(@rhs, t , x0,options);

plot(t,x);

    function dxdt = rhs(t,x)
        dxdt = -(1/R1 + 1/R2)*x/C + 1/R1*abs(sin(100*pi*t))/C ;
        %It's form is dx/dt = -A.x + B.U(t)
    end
end


这个问题可能更适合electronics.stackexchange.com。从MATLAB的角度来看,您似乎正确地使用了
ode45
。我不知道我使用
abs(sin(100*pi*t))
是对还是错。其中一种方法是像您所做的那样对不连续性进行处理。对于其他方法,这个问题需要转移到这里,这可能不是获得电子方面帮助的地方。然而,我看到了一个潜在的问题。您正在尝试集成非常小的值。您的参数“缩放不良”。
C/R1
大约是
1e-8
。使用不同的单元是个好主意。您至少希望这样做以增加集成容差:
opts=odeset('RelTol',1e-12',absol',1e-12);[t,x]=ode45(@rhs,t,0,opts)。注意当您这样做时输出是如何变化的(它可能不是您想要的,但它是不同的)。这表明默认公差不够。你的参数小,频率高,非线性强(
abs
)。这个问题可能更适合electronics.stackexchange.com。从MATLAB的角度来看,您似乎正确地使用了
ode45
。我不知道我使用
abs(sin(100*pi*t))
是对还是错。其中一种方法是像您所做的那样对不连续性进行处理。对于其他方法,这个问题需要转移到这里,这可能不是获得电子方面帮助的地方。然而,我看到了一个潜在的问题。您正在尝试集成非常小的值。您的参数“缩放不良”。
C/R1
大约是
1e-8
。使用不同的单元是个好主意。您至少希望这样做以增加集成容差:
opts=odeset('RelTol',1e-12',absol',1e-12);[t,x]=ode45(@rhs,t,0,opts)。注意当您这样做时输出是如何变化的(它可能不是您想要的,但它是不同的)。这表明默认公差不够。你有小参数、高频振荡和强非线性(
abs
)。你真的认为这个函数有一个类似于你的图的解决方案吗?我知道你不知道。考虑一下<代码> ODE45 的默认容差和结果的大小。我建议:
opts=odeset('RelTol',1e-6,'absol',1e-9);[t,x]=ode45(@rhs,t,x0,opts)@horchler。。。我的缺点是,我认为两者的默认公差都是1e-8,同时也认为频率相对较小。谢谢你,修好了。不过态度可能会更好。@Rasman:这个结果正是我所期望的,非常感谢。原来的方程式我错了:)我有一个新问题。输出电压v是DC,我认为它等于输入的rms(经过多次(R10+R11)/R11=91)。但事实是,v*91和VRM之间的比率为10/9。我试着改变R1、R2和C的值,甚至改变频率,但是10/9的比例没有改变。那么这个比率是多少<代码>绘图(t,(R10+R11)/R11*x*10/9);Y0=220;%Y0是输入V(s)图(t,Y0)的rms ODE45 的默认容差和结果的大小。我建议:
opts=odeset('RelTol',1e-6,'absol',1e-9);[t,x]=ode45(@rhs,t,x0,opts)@horchler。。。我的缺点是,我认为两者的默认公差都是1e-8,同时也认为频率相对较小。谢谢你,修好了。不过态度可能会更好。@Rasman:这个结果正是我所期望的,非常感谢。原来的方程式我错了:)我有一个新问题。输出电压v是DC,我认为它等于输入的rms(经过多次(R10+R11)/R11=91)。但事实是,v*91和VRM之间的比率为10/9。我试着改变R1、R2和C的值,甚至改变频率,但是10/9的比例没有改变。那么这个比率是多少<代码>绘图(t,(R10+R11)/R11*x*10/9);Y0=220;%Y0是输入V(s)图(t,Y0)的rms