如何在matlab中求非线性方程的正实根

如何在matlab中求非线性方程的正实根,第1张

有三个函数可以调用

fzero、solve、fsolve都可以用。

想要自己编程序比如直接迭代法、二分法、黄金分割法、牛顿迭代法、弦截法等等都可以的。

最好把你的具体问题用传上来,我帮你解。

matlab和labview分别可以实现这样的功能,matlab用函数实现,labview直接调用仿真信号VI设置成正弦信号实现。

matlab和labview的互联是通过控件的调用实现的,一般是在labview里调用matlab脚本,因为labview更容易做出强大的界面,matlab拥有强大的数据处理工具包。而且labview掉matlab脚本很简单,直接在labview中调用matlab脚本VI就可以直接编写matlab脚本了。反过来可以实现,但是很麻烦,而且没必要。

滤波器阶数就是这么定义的,所以N=M-1

因为对于一个fir系统而言

y(n)=b0x(n)+b1x(n-1)++bNx(n-N),就是一个N阶滤波器,但是共有N+1个系数。

为啥过渡带宽定义时选03,说不清,但是执行结果看,这样造成100Hz信号被衰减6dB(幅度平方),你可以在figure(2)的上方加如下三行,自己看结果

line([100 100],[-140 20],'color','r')

axis([0 150 -20 0])

grid

这样的话,通带指标衰减不满足题目要求了

matlab只能做离散数值计算(符号计算只是小部分),所以绘制上述信号图形必须抽样离散化(指定时长,抽样频率等),时域图形可逐点画出,频域要做离散FFT后画出。

根据那奎斯特抽样定理,抽样频率要高于信号中最高频率的两倍,才不会失真,因此频谱中(fs/2,fs)为无用谱,故频域信号的定义域向量与值域向量都应该做减半处理

以sin(x)为例:

clear all;   %

N=1024;      %信号的抽样点数

fs=10;       %抽样频率,高于信号中最高频率的2倍

t=(0:N-1)/fs;     

f=(0:N-1)fs/N;   

x=sin(2pit); %待处理信号sin(x)=sin(2πft),f=1hz

y=abs(fft(x));     %FFT后求模

f=f(1:N/2);      %减半

y=y(1:N/2);      %减半

subplot(2,1,1)   %画图

plot(t(1:2fs),x(1:2fs)); %只画2个周期

subplot(2,1,2)   %画图

plot(f,y);

Fs=20e3;

f1=1e3;

f2=8e3;

N=2000;

dt=1/Fs;

df=Fs/N;

t=(0:N-1)dt;

y=sin(2pif1t)+2sin(2pif2t);

%滤波前时域及频谱

figure(1)

subplot(2,1,1)

len=120;

plot(t(1:len),y(1:len))

title('低通滤波前信号')

xlabel('时间(s)')

ylabel('幅值')

grid on

subplot(2,1,2)

Y=abs(fft(y));

f=(0:N/2)df;

Y(1)=Y(1)/N;

Y(2:N/2)=Y(2:N/2)/(N/2);

Y(N/2+1)=Y(N/2+1)/N;

plot(f,Y(1:N/2+1))

xlabel('频率(Hz)')

ylabel('幅值')

grid on

%滤波器

figure(2)

Wp=2e3;

Ws=3e3;

Rp=2;

Rs=20;

[n,Wn]=buttord(Wp/(Fs/2),Ws/(Fs/2),Rp,Rs);

[b,a]=butter(n,Wn);

[H,ff]=freqz(b,a,N,Fs);

plot(ff,abs(H));

title('低通滤波特性曲线')

xlabel('频率(Hz)')

ylabel('归一化幅度')

grid on

%滤波后时域及频谱

figure(3)

subplot(2,1,1)

y2=filter(b,a,y);

plot(t(1:len),y2(1:len));

title('低通滤波后信号')

xlabel('时间(s)')

ylabel('幅值')

grid on

subplot(2,1,2)

Y=abs(fft(y2));

Y(1)=Y(1)/N;

Y(2:N/2)=Y(2:N/2)/(N/2);

Y(N/2+1)=Y(N/2+1)/N;

plot(f,Y(1:N/2+1))

xlabel('频率(Hz)')

ylabel('幅值')

grid on

以上就是关于如何在matlab中求非线性方程的正实根全部的内容,包括:如何在matlab中求非线性方程的正实根、如何使用labview和matlab产生正弦信号、请matlab信号处理大神看下下面的题目和代码详细点,过渡带带宽为什么这么定义,0.3是什么,m和n为什么差1等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10139684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存