2017-02-19 60 views
1

在符號數學工具箱中使用r2016a而沒有分段。希望能夠按照以下方式進行工作,但各種方法都失敗了。預先感謝您的建議。在沒有SMT的MATLAB R2016A中生成分段函數

功能:

(3*x^2)/100 + 30 if x<22.3607  
x^2/100 + 40  if 22.3607<=x<=109.5445  
(3*x^2)/400 + 70 if x>109.5445 

項1)SMT可能將允許:

y(x) = piecewise([x<22.3607, (3*x^2)/100 + 30], [22.3607<=x<=109.5445, x^2/100 + 40], [x>109.5445, (3*x^2)/400 + 70)]); 

結果:

未定義函數或變量 '分段'。

選項2)創建功能:

%%%%%%%%%%%%%%%%%%%%% 
function y = y(x) 
    if x<=22.3607; 
     y = (3*x^2)/100 + 30; 
    else if 22.3607<x<=109.5445; 
     y = x^2/100 + 40; 
    else if 109.5445<x; 
     y = (3*x^2)/400 + 70; 
     end 
     end 
    end 
%%%%%%%%%%%%%%%%%%%%% 

結果:

q_piecewise 沒有足夠的輸入參數。

錯誤q_piecewise(第3行) 如果x < = 22.3607;

選項3)使用heavyside:

y = ['(heaviside(x)-heaviside(x-22.3607))*((3*x^2)/100 + 30) + ' ... 
'(heaviside(x-22.3607)-heaviside(x-109.5445))*(x^2/100 + 40) + ' ... 
'(heaviside(x-109.5445)-heaviside(x-800))*((3*x^2)/400 + 70)']; 

yinv = finverse(y,x) 

結果(試圖計算逆):

yinv = 10.0 *(X - 40.0)^(1/2)

我想能夠輸入一個x值到這個餅cewise方程並獲得y的值。理想情況下,我也希望對上述分段函數進行反轉。另外,我想計算diff()和int(),所以我相信一個符號函數最適合這個。思考?謝謝!!

  • 布萊恩

回答

0

沃爾特·羅伯遜:

沒有MATLAB接口R2016b前分段。可以使用evalin(symengine)在mupad級別構建分段對象,但不能創建它的函數。

f = evalin(symengine,'piecewise([x<5,x^2],[x>=5,-x])') 

可以潛艇()到F或可以INT(F,X)

通過構建在MATLAB級別程序的方式分段需要一些不明顯的步驟。這需要我進行一些搜索以找到我發佈所需的幫助函數的位置......

找到它。

http://www.mathworks.com/matlabcentral/answers/309163-can-i-use-numeric-odesolve-as-a-replacement-to-ode45#answer_240756

您需要的是構建列表輔助功能,您將需要feval(symengine, '分段',列表list,...)

whete LIST由助手構建功能。

0

可選地,從星大步:

y = @(x) ((3*x.^2)/100 + 30) .* (x<22.3607) + (x.^2/100 + 40) .* ((22.3607<=x) & (x<=109.5445)) + ((3*x.^2)/400 + 70) .* (x>109.5445); 

t = linspace(0, 150, 500); 

figure(1) 
plot(t, y(t)) 
grid 
xlabel('t') 
ylabel('y(t)') 
title('Original Fincton') 

yi = linspace(min(y(t)), max(y(t)), 20);     % Interpolate Inverse 
ti = interp1(y(t),t, yi, 'linear'); 

figure(2) 
plot(y(t), t)            % Plot Inverse 
hold on 
plot(yi, ti, 'pg', 'MarkerFaceColor','g')     % Inverse Interpolated Values 
hold off 
grid 
xlabel('y(t)') 
ylabel('t') 
title('Inverse Function') 

它需要邏輯索引的優點,然後只添加載體的片以產生連續的線。

反函數與interp1函數一起使用。