二階編程
Ⅰ matlab中,已知典型二階函數G(s)=w*2/s*2+2ws+w*2,試利用m文件編程實現當w
摘要 實現代碼:
Ⅱ 用C語言編程歐拉法、梯形法、二級二階R-K、三級三階R-K、四級四階R-K求解下列方程的數值解
歐拉法求解y'=-2y-4x, x0=0, y0=2, x<=1的求解如下:
#include<stdio.h>
/*solve ode: dy/dx = -2*y -4*x*/
float fun(float x,float y){
float f;
f=-2.0*y -4.0*x;
return f;
}
int main(){
float x0=0,y0=2.0,x,y,h=0.1,t=1.0,k;
/* printf(" Enter x0,y0,h,xn: "); scanf("%f%f%f%f",&x0,&y0,&h,&t);*/
x=x0;
y=y0;
printf(" x y ");
while(x<=t) {
k=h*fun(x,y);
y=y+k;
x=x+h;
printf("%0.3f %0.3f ",x,y);
}return 0;
}
代碼截圖+運行結果
(晚點我再來看後面的幾小問)
Ⅲ 如何用Matlab編程計算二階常微分方程組的數值解
用Matlab編程計算二階常微分方程組的數值解的方法有很多種,最常用有ode45函數。
ode45函數的使用格式:
【t,y】=ode45(odefun,tspan,y0)
例如:
Ⅳ 怎樣通過matlab編程語言實現二階電路的求解
因為你w沒有給定值,所以我假定為工頻了,代碼如下
R1=22;L=50e-3;R2=33;C=100e-6;w=2*pi*50;Uc=200*exp(1i*90*pi/180)/(R2*1/(1i*w*C)/(R2+1/(1i*w*C))+R1+1i*w*L)*R2*1/(1i*w*C)/(R2+1/(1i*w*C));
fplot(@(t)(200*cos(w*t+90*pi/180)),[0,0.08],'r')
hold on
fplot(@(t)(abs(Uc)*cos(w*t+angle(Uc))),[0,0.08],'b')
legend('Us(t)','Uc(t)')
grid on
Ⅳ 求助非線性二階微分方程編程
用dsolve
>> Y=dsolve('D2x+a*sin(x)=0')
Warning: Explicit solution could not be found; implicit solution returned.
> In dsolve at 321
Y =
Int(1/(2*a*cos(_a)+C1)^(1/2),_a = .. x)-t-C2 = 0
Int(-1/(2*a*cos(_a)+C1)^(1/2),_a = .. x)-t-C2 = 0
顯式的解無法獲得,只能得到隱式的解
Ⅵ matlab編程實現二階切比雪夫Ⅰ型低通濾波器,要求濾除1000HZ和4500HZ的復合信號中4500HZ的部分。
clc;clear all;
%歸一化模擬切比雪夫I型低通濾波器的設計
Wp=2*pi*1000;Ws=2*pi*1500;rp=3;rs=30;%設計濾波器的參數
wp=1;ws=Ws/Wp; %頻帶變換得到歸一化濾波器
[N,wc]=cheb1ord(wp,ws,rp,rs,'s'); %計算濾波器階數和3dB截止頻率
[z,p,k]=cheb1ap(N,rp); %計算歸一化濾波器的零極點
[b,a]=zp2tf(z,p,k); %計算歸一化濾波器系統函數的系數
w0=0:0.05*pi:2*pi;
[h0,w0]=freqs(b,a,w0); %求頻率響應
figure(1)
plot(w0,20*log10(abs(h0)),'k');
title('歸一化模擬且比雪夫I型低通濾波器');
xlabel('頻率f/Hz');ylabel('幅度/dB');grid;
%一般低通切比雪夫低通濾波器的設計
[B,A]=lp2lp(b,a,Wp); %將歸一化濾波器轉換為一般模擬濾波器
w1=0:2*pi*100:2*pi*30000;
[h1,w1]=freqs(B,A,w1);
figure(2)
plot(w1/(2*pi),20*log10(abs(h1)),'k');
title('一般模擬且比雪夫I型低通濾波器');
xlabel('頻率f/Hz');ylabel('幅度/dB');grid;
%沖激響應不變法設計低通巴特沃斯數字濾波器
Fs=10000; %采樣頻率
Wp1=Wp/Fs;Ws1=Ws/Fs;
rp1=3;rs1=30; %設計濾波器的參數
[N1,Wn]=cheb1ord(Wp,Ws,rp1,rs1,'s') %計算濾波器階數
[b1,a1]=cheby1(N1,rp1,Wn,'s'); %樣本AF的系數函數的分子分母系數
[bz,az]=impinvar(b1,a1,Fs); %沖激響應不變法從AF到DF變換
[C1,B1,A1]=dir2par(bz,az) %直接形式轉換為並聯型
w2=[Wp1,Ws1]; %數字臨界頻率
[H,f]=freqz(bz,az); %繪制數字濾波器的幅頻特性和相頻特性
[db,mag,pha,grd,f]=freqz_m(bz,az); %擴展函數檢驗濾波器的其他特性
figure(3)
plot(f/pi,db,'k');
title('沖激響應不變法設計低通切比雪夫I型數字濾波器');
xlabel('角頻率w/pi');ylabel('振幅/dB');
axis([0,0.35,-30,5]);grid;
%用設計好的濾波器對信號進濾波處理
figure(4)
f1=500;f2=4000; %輸入信號的頻率
N=100; %數據長度
dt=1/Fs;n=0:N-1;t=n*dt; %采樣間隔和時間序列
x=sin(2*pi*f1*t)+0.5*cos(2*pi*f2*t); %輸入信號
subplot(2,1,1),plot(t,x),title('輸入信號');
y=filtfilt(bz,az,x); %用濾波器進行濾波處理
y1=filter(bz,az,x); %進行濾波處理
subplot(2,1,2),plot(t,y,t,y1,':'),title('輸出信號');xlabel('時間/s');
legend('filtfilt','filter') %加圖例
freqz_m.m文件
function[db,mag,pha,grd,w]=freqz_m(b,a)
[H,w]=freqz(b,a,1000,'whole');
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
grd=grpdelay(pha);
dir2par.m文件
function [C,B,A] = dir2par(b,a)
M=length(b);N=length(a);
[r1,p1,C]=resiez(b,a);
p=cplxpair(p1,10000000*eps);
I=cplxcomp(p1,p);
r=r1(I);
K=floor(N/2);B=zeros(K,2);A=zeros(K,3);
if K*2==N;
for i=1:2:N-2
Brow=r(i:1:i+1,:);
Arow=p(i:1:i+1,:);
[Brow,Arow]=resiez(Brow,Arow,[]);
B(fix((i+1)/2),:)=real(Brow);
A(fix((i+1)/2),:)=real(Arow);
end
[Brow,Arow]=resiez(r(N-1),p(N-1),[]);
B(K,:)=[real(Brow) 0];A(K,:)=[real(Arow) 0];
else
for i=1:2:N-1
Brow=r(i:1:i+1,:);
Arow=p(i:1:i+1,:);
[Brow,Arow]=resiez(Brow,Arow,[]);
B(fix((i+1)/2),:)=real(Brow);
A(fix((i+1)/2),:)=real(Arow);
end
end
cplxcomp.m文件
function I=cplxcomp(p1,p2)
I=[];
for j=1:1:length(p2)
for i=1:1:length(p1)
if(abs(p1(i)-p2(j))<0.0001)
I=[I,i];
end
end
end
I=I';
Ⅶ 二階龍格庫塔法迭代公式用Matlab怎麼編程
四階龍格庫塔法精度為4,屬於單步遞推法,單步遞推法的基本思想是從(x(i),y(i))點出發,以某一斜率沿直線達到(x(i+1),y(i+1))點,從上述定義可以看出,龍格庫塔實質上是求一階微分方程,對其進行排列後就可以進入Matlab進行編程。
但是如果將一階導看作變數,則二階導也不過是這個變數的一階導而已,對於下述二階方程:基本思想如下令位移為q的一階導,即位移的一階導(速度)為q的二階導。
是用一個簡單的迭代式來畫分叉混沌圖的,從這個例子里,不難學到如何如何畫分叉圖,其原理不難,兩個循環來在2維平面作圖,一個if篩選迭代的結果。
還是類似上面那個例子,這里給出不一樣的代碼實現方法。沒看懂的可以再看一遍,裡面主要的還是兩個for循環,下面這個代碼是用第三個for循環來實現對迭代結果的篩選的,這里不必糾結細節,功能實現用if或者for都可以。
依次類推,如果在區間[xi,xi+1]內多預估幾個點上的斜率值K1、K2、……Km,並用他們的加權平均數作為平均斜率K*的近似值,顯然能構造出具有很高精度的高階計算公式。經數學推導、求解,可以得出四階龍格-庫塔公式,也就是在工程中應用廣泛的經典龍格-庫塔演算法這樣就完成了matlab的編程。
Ⅷ 二階通用濾波器用C語言怎麼編程
shorth[],shorty[]){inti,j,sum;for(j=0;j>15;}}2voidfir(shortx[],shorth[],shorty[]){inti,j,sum0,sum1;shortx0,x1,h0,h1;for(j=0;j>15;y[j+1]=sum1>>15;}}3voidfir(shortx[],shorth[],shorty[]){inti,j,sum0,sum1;shortx0,x1,x2,x3,x4,x5,x6,x7,h0,h1,h2,h3,h4,h5,h6,h7;for(j=0;j>15;y[j+1]=sum1>>15;}}
Ⅸ 關於二階和四階龍格庫塔法的計算與編程調試
求解二階微分方程,初始條件還需要給出y1'(0)和y2'(0)。這里暫時按照0處理。
function zd530003514
a=0.1;
b=0.1;
Y0 = [b-1; 0; b; 0];
% 解方程
[t,Y]= ode45(@ode,[0 10],Y0);
y1=Y(:,1);
y2=Y(:,3);
% 繪圖
subplot 211
plot(t,y1);
subplot 212
plot(t,y2);
% 微分方程定義
function dY = ode(t, Y)
L1=5;
L2=0.01;
a0=2;
b0=2;
c0=2;
y1=Y(1);y2=Y(3);
dY = [
Y(2);
-(a0*y2+b0*y2^2+c0*y2^3) - L1^2*L2*y1 - L1^2*y1;
Y(4);
-(a0*y2+b0*y2^2+c0*y2^3) - L1^2*L2*y1;
];
Ⅹ 龍格庫塔求解二階微分方程組的MATLAB編程
MATLAB求解x''+0.7x'+0.8x'|x'|+25.6x-25.6x³=0二階微分方程組的方法,可以按下列步驟進行:
1、建立自定義函數func()
function
f
=
func(t,x)
%x''+0.7x'+0.8x'|x'|+25.6x-25.6x³=0
f(1)=x(2);
f(2)=25.6*x(1)^3-25.6*x(1)-0.8*x(2)*abs(x(2))-0.7*x(2);
f=f(:);
2、建立龍格庫塔演算法函數runge_kutta()
調用格式:[t,x]
=
runge_kutta(@(t,x)func(t,x),x0,h,a,b);
3、然後根據x和x'數據,繪制出x(t)、x′(t)的圖形。
plot(x(:,1),x(:,2))