如何在MATLAB中找到给定方程的参数

zxlwwiss  于 2023-04-21  发布在  Matlab
关注(0)|答案(2)|浏览(199)

我想知道对于x的什么值,sinc(x) 函数将是其最大值的一半。请注意,这个问题可以扩展到一个更一般的问题,这样我们就不能很容易地找到一个特定函数的逆,所以我们被迫求助于MATLAB等仿真软件来找到可以解决方程的参数。

cs7cruho

cs7cruho1#

1.这并不能解决问题

syms x
eq= sinc(x)==0.5*max(sinc(x));
sol=solve(eq)

sol=1是根,零交叉,而不是max的一半。
2.-符号max在这里也不起作用

syms x
assume(x,'real')
maxsinc=max(sinc(x))

再次max返回一个平凡的答案

3-用数字表示

我知道,符号运算看起来很舒服,但是因为它提到目标是推广到任何函数,在我看来,在这个问题的上下文中,数字比尝试符号运算更有用。
使用数值而不是符号,将搜索限制在已知的区间内,具有足够的分辨率(dx足够小),现在可以轻松地找到任何值和任何解析函数的max

4.-使用函数交集

i ntersections.m不是一个标准的MATLAB函数,但它是公开的,免费的,并且非常健壮和有用。
它由道格拉斯施瓦茨编写,可在here上使用

dx=.0001;
x=[-10:dx:10];
y1=sinc(x);

y2=sinc(x)-.5*max(y1);

x0=intersections([-10 10],[0 0],x,y2)

函数交集找到所有的半最大根,而不仅仅是来自图左侧的第一个:

x0 =
   -0.6034
    0.6034

用任何函数替换sinc(x),你会看到intersections的工作效果。

pexxcrt2

pexxcrt22#

基本上你只想解方程sinc(x)=0.5*max(sinc(x))?如果是这样,

syms x
eq= sinc(x)==0.5*max(sinc(x));
sol=solve(eq);

相关问题