0

我正在尝试为圆图 f(x) = 2x + a + b*sin(2*pi*x)/pi mod 1 绘制 Arnold 舌头的边界(存在周期性解的区域)。这些是当f^n(x)=x且d/dx(f^n(x)) = 1时定义,其中f^n(x)表示函数迭代n次,即f^2(x) = f(f (x)),n为周期点的周期。

我希望能够采用这两个方程并用 b 为 Arnold 舌头的边界写一个方程,所以我会得到满足方程的 x = g(b) 和 a = h(b)。然后我想针对 b 绘制 a 。

从分析上讲,我可以通过重新排列 d/dx(f(x)) = 1 for x 以这种方式解决周期 1 边界的问题,x 以 b 形式给出 x,然后将此值代入 f(x) = x 以给出 a in b. 条款 我还设法通过以下方式在 MATLAB 中使用符号方程来做到这一点。

clear;

syms x a b
f = 2*x + a + (b/pi)*sin(2*pi*x);
g = diff(f,x);
solx = solve(g==1,x);
fnox = subs(f,x,solx);
solb(1) = solve(fnox(1)==solx(1), a);
solb(2) = solve(fnox(2)==solx(2),a);

[xval1,yval1] = fplot(matlabFunction(solb(1)),[0 1]);
[xval2,yval2] = fplot(matlabFunction(solb(2)),[0 1]);

A1 = [xval1,yval1];
A2 = [xval2,yval2];
A1 = A1(imag(A1(:,2))==0,:);
A2 = A2(imag(A2(:,2))==0,:);

figure(1)
hold on;
plot(A1(:,2),A1(:,1),'b')
plot(A2(:,2),A2(:,1),'b')
hold off;

问题是,我有办法解决第 2 期或更高的边界吗?我试过以下,

f2 = subs(f,x,f)
g2 = diff(f2,x)
solx2 = solve(g2==1,x);

但是,我收到“找不到明确的解决方案”警告。我认为也许这个方程太复杂了,MATLAB 无法以符号方式求解。有没有办法使用符号方程让它工作?如果没有,是否有合适的数值方法来执行上述操作?

非常感谢任何帮助,在此先感谢。

4

0 回答 0