Nodal basis function 1D

mohamad hoseini · Mar 23, 2022 · 1.9K views
Question
Hello all, I coded a nodal basis function for 1D element from [-1,1]. the code is below:   close all; clc; clearvars; n=10; x = linspace(-1,1,n); for i=1:n a= x(i); for j=1:n b(j)=a.^(j-1); end v(i,:)=b'; end vinv=inv(v); for i=1:n k=zeros(1,n); k(i)=1; f=vinv*k' p(:,i)=f; end for i=1:n g=@(x) p(1,i)+p(2,i).*x+p(3,i).*x.^2+p(4,i).*x.^3+p(5,i).*x.^4+p(6,i).*x.^5+p(7,i).*x.^6+p(8,i).*x.^7+p(9,i).*x.^8+ .... p(10,i).*x.^9; legendInfo{i} = ['Phi ' num2str(i)]; fplot(g, [-1 1]) legend(legendInfo) hold on; end The code works already but my problem is in last "for loop" where I calculated "g" as a function handle. I want to instead of adding the terms from 1 to 10, use an automated calculation. Now, if I want to change number of nodes (n) from 10 to 20 I have to add 10 additional terms by hand. Moreover, Does somebody knows a better way to calculate nodal basis function for 1D element? Great thanks,
Expert Answer
Profile picture of John Williams
John Williams PhD Expert
Answered Aug 25, 2026

Read about polyval

 

n=10;
x = linspace(-1,1,n);
for i=1:n
    a= x(i);
    for j=1:n
        b(j)=a.^(j-1);
    end
    v(i,:)=b';
end
vinv=inv(v);
for i=1:n
    k=zeros(1,n);
    k(i)=1;
    f=vinv*k'
    p(:,i)=f;
end
x = linspace(-1,1,1000) ;

for i=1:n
    r = flipud(p(:,i)) ;
    y = polyval(r,x) ;
     legendInfo{i} = ['Phi ' num2str(i)];
    plot(x,y)
    legend(legendInfo)
    hold on;
end

 

100% Run Guarantee 3-Hour Fast-Track Delivery

Need a Custom Version or Complete Simulation for This Problem?

Our 500+ PhD engineers build, debug, and optimize working MATLAB scripts and Simulink (.slx) models tailored to your exact assignment rubrics with zero plagiarism.

Tested on MATLAB R2024b / R2026a
Turnitin 0% Plagiarism Report
Free 7-Day Revisions Guarantee
Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!