From 2a245cbef28ad7841c9d53bec54e63edda80f9aa Mon Sep 17 00:00:00 2001 From: Matthew Ellison Date: Wed, 10 Oct 2018 12:27:33 -0400 Subject: [PATCH] Aid to homeword 3.1 Problem 1 --- Homework/Homework311.m | 63 +++++++++++++++++++++++++++ Homework/LagrangePolynomialSymbolic.m | 27 ++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 Homework/Homework311.m create mode 100644 Homework/LagrangePolynomialSymbolic.m diff --git a/Homework/Homework311.m b/Homework/Homework311.m new file mode 100644 index 0000000..a68b7e4 --- /dev/null +++ b/Homework/Homework311.m @@ -0,0 +1,63 @@ +%This is a script to do the homework for 3.1 problem1 + +pkg load symbolic; +syms x; +x_list = [0, 0.6, 0.9]; +xValue = 0.45; + +%Part a +y_list = cos(x_list); +f = cos(x); +disp('a:') +[P01, P12, P02] = LagrangePolynomialSymbolic(x_list, f); +fEval = double(subs(f, xValue)); +pEval = double(subs(P01, xValue)); +disp('Error:') +disp(['|f(x) - P01(x)| = |' num2str(fEval, '%9.9g') ' - ' num2str(pEval, '%9.9g') '| = ' num2str(abs(fEval - pEval), '%9.9g')]) +pEval = double(subs(P02, xValue)); +disp(['|f(x) - P02(x)| = |' num2str(fEval, '%9.9g') ' - ' num2str(pEval, '%9.9g') '| = ' num2str(abs(fEval - pEval), '%9.9g')]) + +%Part b +y_list = sqrt(1 + x_list); +f = sqrt(1 + x); +disp('') +disp('') +disp('b:') +[P01, P12, P02] = LagrangePolynomialSymbolic(x_list, f); +fEval = double(subs(f, xValue)); +pEval = double(subs(P01, xValue)); +disp('Error:') +disp(['|f(x) - P01(x)| = |' num2str(fEval, '%9.9g') ' - ' num2str(pEval, '%9.9g') '| = ' num2str(abs(fEval - pEval), '%9.9g')]) +pEval = double(subs(P02, xValue)); +disp(['|f(x) - P02(x)| = |' num2str(fEval, '%9.9g') ' - ' num2str(pEval, '%9.9g') '| = ' num2str(abs(fEval - pEval), '%9.9g')]) + +%Part c +y_list = log(x_list + 1); +f = log(x + 1); +disp('') +disp('') +disp('c:') +[P01, P12, P02] = LagrangePolynomialSymbolic(x_list, f); +fEval = double(subs(f, xValue)); +pEval = double(subs(P01, xValue)); +disp('Error:') +disp(['|f(x) - P01(x)| = |' num2str(fEval, '%9.9g') ' - ' num2str(pEval, '%9.9g') '| = ' num2str(abs(fEval - pEval), '%9.9g')]) +pEval = double(subs(P02, xValue)); +disp(['|f(x) - P02(x)| = |' num2str(fEval, '%9.9g') ' - ' num2str(pEval, '%9.9g') '| = ' num2str(abs(fEval - pEval), '%9.9g')]) + +%Part d +y_list = tan(x_list); +f = tan(x); +disp('') +disp('') +disp('d:') +[P01, P12, P02] = LagrangePolynomialSymbolic(x_list, f); +fEval = double(subs(f, xValue)); +pEval = double(subs(P01, xValue)); +disp('Error:') +disp(['|f(x) - P01(x)| = |' num2str(fEval, '%9.9g') ' - ' num2str(pEval, '%9.9g') '| = ' num2str(abs(fEval - pEval), '%9.9g')]) +pEval = double(subs(P02, xValue)); +disp(['|f(x) - P02(x)| = |' num2str(fEval, '%9.9g') ' - ' num2str(pEval, '%9.9g') '| = ' num2str(abs(fEval - pEval), '%9.9g')]) + +%Cleanup your variables +clear P01 P12 P02 f fEval pEval x xValue x_list y_list diff --git a/Homework/LagrangePolynomialSymbolic.m b/Homework/LagrangePolynomialSymbolic.m new file mode 100644 index 0000000..d007a00 --- /dev/null +++ b/Homework/LagrangePolynomialSymbolic.m @@ -0,0 +1,27 @@ +function [ P01, P12, P2 ] = LagrangePolynomialSymbolic(x_list, f) + syms x; + format long; + warning('off','OctSymPy:sym:rationalapprox'); + + %Evaluate P0,1 + %P01 = (((x - x_list(2))/(x_list(1) - x_list(2))) * double(subs(f, x_list(1)))) + (((x - x_list(1))/(x_list(2) - x_list(1))) * double(subs(f, x_list(2)))) + P01x = (double(subs(f, x_list(1)))/(x_list(1) - x_list(2))) + (double(subs(f, x_list(2)))/(x_list(2) - x_list(1))); + P01c = ((double(subs(f, x_list(1)))/(x_list(1) - x_list(2))) * -x_list(2)) + ((double(subs(f, x_list(2)))/(x_list(2) - x_list(1))) * -x_list(1)); + disp(['P01 = ' num2str(P01x, '%9.9g') 'x + ' num2str(P01c, '%9.9g')]) + P01 = (P01x * x) + P01c; + + %Evaluate P1,2 + %P12 = (((x - x_list(3))/(x_list(2) - x_list(3))) * double(subs(f, x_list(2)))) + (((x - x_list(2))/(x_list(3) - x_list(2))) * double(subs(f, x_list(3)))) + P12x = (double(subs(f, x_list(2)))/(x_list(2) - x_list(3))) + (double(subs(f, x_list(3)))/(x_list(3) - x_list(2))); + P12c = ((double(subs(f, x_list(2)))/(x_list(2) - x_list(3))) * -x_list(3)) + ((double(subs(f, x_list(3)))/(x_list(3) - x_list(2))) * -x_list(2)); + disp(['P12 = ' num2str(P12x, '%9.9g') 'x + ' num2str(P12c, '%9.9g')]) + P12 = (P12x * x) + P12c; + + %Evaluate P2 + %P2 = (P2x * x) + P2c; + P2x2 = (P01x - P12x) / (x_list(1) - x_list(3)); + P2x = ((P01c) + (P01x * -x_list(3)) - ((P12x * -x_list(1)) + (P12c))) / (x_list(1) - x_list(3)); + P2c = ((P01c * -x_list(3)) - (P12c * -x_list(1))) / (x_list(1) - x_list(3)); + disp(['P02 = ' num2str(P2x2, '%9.9g') 'x^2 + ' num2str(P2x, '%9.9g') 'x + ' num2str(P2c, '%9.9g')]) + P2 = (P2x2 * x^2) + (P2x * x) + P2c; +end