How can I create a handle to an expression or vector function and then build it?

How can I create a vector function descriptor (anonymous function) with the product of a scalar value, and then the result of the construction. Clearly, I want to build this formula

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));

This code is without a loop, but give me: '' Error using graph. Converting to double from sym is not possible.

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');

In addition, I’m tired of using alternative codes with a loop condition, but the error persists, since conversion to logical from a character is not possible.

% 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--'); 

please, how can i fix this?

+4
source share
1 answer

plot(x,iFx), iFx ( iFy) x, . - : ) , 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');

Edit:

, matlabFunction:

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

symfun vs matlabFunction : matlab symfun

TL; DR: matlabFunction , , . , ; . , , matlabFunction.

+1

Source: https://habr.com/ru/post/1690473/


All Articles