[已答复] 方程有多个根,但是我仅求出一个根?

[复制链接]
xmzdls 发表于 2022-6-20 17:30:52
大家帮忙看看,由函数的图形可知,y=20时,应该对应了多个根,但是我用vpasolve函数仅求出一个根。程序如下:
close all
clc,clear;
x=0:0.1:35;
y=x+10*sin(x);
figure(1)
plot(x,y,'k')
hold on
%% 采样
x1=0:1:35;
y1=x1+10*sin(x1);
scatter(x1,y1,'r^')
%% 高斯核函数
lambda=1e-5;
theta1=1;
theta2=1;
for ii=1:1:length(x1)
    for jj=1:1:length(x1)
        K(ii,jj)=theta1*exp(-(abs(x1(ii)-x1(jj)))^2/theta2);
    end
end
I=eye(length(x1));
v=inv((K+lambda*I))*y1';
xnew=0:0.1:35;
for ii=1:1:length(x1)
    for jj=1:1:length(xnew)
        k_xnew(ii,jj)=theta1*exp(-(abs(x1(ii)-xnew(jj)))^2/theta2);
    end
end
ynew=v.'* k_xnew;
plot(xnew,ynew,'b--')
%% 求y=20时,对应的x
syms X
for ii=1:1:length(x1)
    kk_xnew(ii,1)=theta1*exp(-(abs(x1(ii)-X))^2/theta2);
end
Y=v.'* kk_xnew;
Xopt=vpasolve(Y-20,X);
xopt=eval(Xopt);


5 条回复


xmzdls 发表于 2022-6-20 17:31:59
请大家指教:handshake:handshake

xmzdls 发表于 2022-6-20 20:47:18
我怀疑是三角函数的关系,但是我不清楚三角函数是如何影响方程的根的,有人能解惑吗

maple1314168 发表于 2022-6-23 15:32:23
doc vpasolve看看帮助。
vpasolve可以约束范围求解。
如果你想 像一元二次、一元三次那样给出所有解的话:
这可能难为数学家。

xmzdls 发表于 2022-6-23 16:14:06
maple1314168 发表于 2022-6-23 15:32
doc vpasolve看看帮助。
vpasolve可以约束范围求解。
如果你想 像一元二次、一元三次那样给出所有解的话:

谢谢你的回复,这个问题我知道问题出在哪里了,就是方程中三角函数的原因,vpasolve只能求解所指定的某初始值附近的根,和你所说的约束范围的根是一个意思。这样就存在一个问题,对于一个复杂的函数,我不知道根的位置(假设也没法画出图形),我就没法给出初始值或者范围,请问有没有方法能实现不给约束求出所有的根?

maple1314168 发表于 2022-6-23 16:21:57
本帖最后由 maple1314168 于 2022-6-23 16:31 编辑
xmzdls 发表于 2022-6-23 16:14
谢谢你的回复,这个问题我知道问题出在哪里了,就是方程中三角函数的原因,vpasolve只能求解所指定的某初 ...

我上面都说,难为数学家!    对于任意的方程,不存在这样的方法!不要因为初高中的手工解法,认为什么方程都可以解决。
否则,matlab软件为何搞这么多的求解函数。(当然部分是因为计算效率的问题。)
否则,什么数学大奖你都可以拿回来!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表