matlab符号变量句柄函数,matlab – 如何创建表达式或向量函数句柄,然后绘制它?...

该博客讲述了在MATLAB中使用符号函数创建向量函数句柄时遇到的问题,以及如何通过将符号变量转换为符号函数来解决"从sym转换到double不可能"的错误。博主分享了如何正确地调用和绘制函数,同时提供了两种方法:使用`symfun`和`matlabFunction`。这两种方法都可以避免循环并有效地绘制函数图形。
摘要由CSDN通过智能技术生成

如何使用产品标量值创建向量函数句柄(匿名函数),然后绘制结果.显然,我想绘制这个公式

Let f(x,ym)= (1-exp(x-ym)/h); and

iX(x)=1/6.f(x,ym(1))+

7/6.f(x,ym(2))+

25/6.f(x,ym(3))+

43/6.f(x,ym(4));

iY(x)=1/5.f(x,ym(1))+

2/5.f(x,ym(2))+

14/5.f(x,ym(3))+

4/5.f(x,ym(4));

这个代码没有循环但是给我:”使用绘图时出错转换从sym加倍是不可能的”.

clear all;clc;a=0;b=2;n=3;h=(b-a)/n;ym=a:h:b;

X=[ 1/6, 7/6, 25/6,43/6]; % Data

Y=[ 1/5, 2/5, 14/5,14/5];

f=@(x,ym) (1-exp(x-ym)/h);

% with syms

syms x;

iX=f(x,ym(1:length(ym))).*X; % result iX= [f.1/6 , f.7/6 , f.25/6 , f.43/6]

iY=f(x,ym(1:length(ym))).*Y;

iFx= sum(iX);iFy=sum(iY); % result iFx= f.1/6 + f.7/6 + f.25/6 + f.43/6

x=ym;

plot(x,iFx,'r+');hold on;plot(x,iFy,'og');

此外,我厌倦了使用具有循环条件的替代代码,但错误仍然存​​在,因为无法从sym转换为逻辑.

% clear all;clc

% a=0;b=2;n=3;h=(b-a)/n;ym=a:h:b;

% %

% X=[ 1/6, 7/6, 25/6,43/6]; % Data

% Y=[ 1/5, 2/5, 14/5,4/5];

% %

% f=@(x,ym) (1-exp(x-ym)/h);

% %

% syms x %double(subs(x))

% iX=cell(1,length(ym));iY=cell(1,length(ym)); % cell, iX{k} and iY{k}

% % iX=zeros(1,length(ym));iY=zeros(1,length(ym));

% for k=1:length(ym)

% % iX(k) = f(x,ym(k)).*X(k);

% % iY(k) = f(x,ym(k)).*Y(k);

% iX{k} = @(x,k) f(x,ym(k)).*X(k);

% iY{k} = @(x,k) f(x,ym(k)).*Y(k);

% iX(x,k);

% end

% whos

% x=ym;

% plot(x,iX{:},'r:');hold on;plot(x,iY{:},'b--');

拜托,我该怎么办呢?

最佳答案 你不能直接调用plot(x,iFx),因为iFx(和iFy)是依赖于x的符号变量,而不是实际将一些实际值放入其中的输出.最简单的方法是修复这个问题,以便a)使用

symfun(formula,variables)和b)将符号变量转换为符号函数,然后使用要绘制它们的值调用所述函数:

clear all;clc;a=0;b=2;n=3;h=(b-a)/n;ym=a:h:b;

X=[ 1/6, 7/6, 25/6,43/6]; % Data

Y=[ 1/5, 2/5, 14/5,14/5];

f=@(x,ym) (1-exp(x-ym)/h);

% with syms

syms x;

iX=f(x,ym(1:length(ym))).*X; % result iX= [f.1/6 , f.7/6 , f.25/6 , f.43/6]

iY=f(x,ym(1:length(ym))).*Y;

iFx= sum(iX);iFy=sum(iY); % result iFx= f.1/6 + f.7/6 + f.25/6 + f.43/6

% same code until here

% step a) turn to symbolic function

iFx = symfun(iFx,x); iFy = symfun(iFy,x);

% step b) call the function with the "x" value of the plot.

plot(ym,iFx(ym),'r+');

hold on;

plot(ym,iFy(ym),'og');

编辑:

当然,你可以用matlabFunction做同样的事情:

iFx = matlabFunction(iFx); iFy = matlabFunction(iFy);

TL; DR:matlabFunction返回一个通常更快的匿名函数,但符号函数更灵活.但在这种情况下,无论哪种方式都无关紧要,因为函数非常简单,评估数据的数量很少;因此它几乎可以立即计算.但是使用matlabFunction可能是个好习惯.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值