Trying to solve dy/dx = 2xy, y(1) = 1, using Chebyshev differentiation matrix

The exact solution is y = exp(x.^2 -1);

Heres what I have:

% compute the chebyshev differentiation matrix and x-grid [D1,x] = cheb(N);

% boundary condition (I don't know if this is correct?) D1 = D1(1:end-1,1:end-1); x = x(1:end-1);

% compute the derivatives at x (i.e. at the chebyshev grid points) f = 2*x.*ones(size(x));

% solve u = D1\f;

% set the boundary condition u = [u;1];

Where cheb.m is from Trefethen (spectral methods in matlab)

function [D,x] = cheb(N)

% check the base case if N == 0; D = 0; x = 1; return; end

% create the Chebyshev grid x = cos(pi*(0:N)/N)';

c = [2; ones(N-1,1);2].*(-1).^(0:N)'; X = repmat(x,1,N+1); dX = X-X'; D = (c*(1./c)')./(dX+(eye(N+1))); D = D - diag(sum(D'));

This solution (u = D1\f) does not match the exact solution at all.

I think what I have is close ... Any help would be awesome. Thanks in advance!

*No products are associated with this question.*

Answer by Star Strider
on 18 Oct 2012

Edited by Star Strider
on 19 Oct 2012

It took longer than I thought it would for me to learn something about spectral methods and particularly Chebyshev differentiation matrices. Fortunately, the relevant chapters of *Spectral Methods in MATLAB* are available online.

The problem you are having seems to be in the way you define your ` f` variable:

f = 2*x.*ones(size(x));

in the context of your original differential equation:

`dy/dx = 2*x*y`

Specifically, ` y` is

f = 2*x.*exp(x.^2 - 1);

and then calculated:

u = lsqr(D1,f);

I got a value for ` u` that differed from the analytic integrated differential equation by a constant of

I also calculated ` u` using

Log in to comment.

Answer by Qiqi Wang
on 11 May 2017 at 13:23

Edited by Qiqi Wang
on 11 May 2017 at 13:24

The original post was right that the boundary condition was not set correct. Here's a right way to set the boundary condition:

% compute the chebyshev differentiation matrix and x-grid [D,x] = cheb(N); % compute the derivatives at x (i.e. at the chebyshev grid points) f = 2*x.*exp(x.^2 - 1); % boundary condition (correct way) D(end,:) = 0; D(end,end) = 1; f(end) = 1; % solve u = D\f;

Log in to comment.

Related Content

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments

Log in to comment.