matlab绘制二维离散映射的caputo形式
时间: 2023-07-13 15:18:30 浏览: 104
Plot_Figure_Discretized_Fractional_Substantial_Calculus.m:计算离散的分数实质演算和绘图数字-matlab开发
在 Matlab 中绘制二维离散映射的 Caputo 形式,需要先定义分数阶参数 $\alpha$ 和 $\beta$,离散化的格点数 $n$,以及函数 $f(x,y)$。这里我们以 $f(x,y)=x^2+y^2$ 为例进行绘制。
代码如下:
```
alpha = 0.5;
beta = 0.4;
n = 20;
[x,y] = meshgrid(1:n,1:n);
f = x.^2 + y.^2;
Df = zeros(n,n);
for k = 1:n
for l = 1:n
Df(k,l) = caputo2d(alpha,beta,k,l,n,f);
end
end
surf(x,y,Df);
xlabel('x');
ylabel('y');
zlabel('Caputo');
```
其中,函数 `caputo2d` 是用于计算二维离散映射的 Caputo 形式的自定义函数,代码如下:
```
function res = caputo2d(alpha,beta,k,l,n,f)
res = 0;
for i = 0:n-1
A = (-1)^i * nchoosek(n,i) * (k-i)^(n-alpha-1);
for j = 0:n-1
B = (-1)^j * nchoosek(n,j) * (l-j)^(n-beta-1);
res = res + A * B * f(i+1,j+1);
end
end
res = res / gamma(n-alpha) / gamma(n-beta);
if k == n
B = (-1)^l * nchoosek(n,l) * (k-n)^(1-alpha);
res = res + B * f(n,l);
res = res / gamma(2-alpha);
end
if l == n
A = (-1)^k * nchoosek(n,k) * (l-n)^(1-beta);
res = res + A * f(k,n);
res = res / gamma(2-beta);
end
if k == n && l == n
res = res + (k-n)^(1-alpha) * (l-n)^(1-beta) * f(n,n);
res = res / gamma(3-alpha-beta);
end
end
```
运行以上代码,可以得到二维离散映射的 Caputo 形式的可视化结果。
阅读全文