All pastes #544216 Raw Edit

eight ball

public text v1 · immutable
·published 2007-06-06 10:52 UTC
rendered paste body
polyadd.m

function[pout]=polyadd(p1,p2)
%p1, p2= Polynome verschiedener Laenge

p1=[zeros(1,length(p2)-length(p1)),p1];
p2=[zeros(1,length(p1)-length(p2)),p2];
pout=p1+p2;





polytang.m

function [pout]=polytang(p,x0)
%p: Koeffizientenvektor;
%x0: Stelle an der Tangente berechnet werden soll;

pout= [polyval(polyder(p),x0),polyval(p,x0)-(polyval(polyder(p),x0)).*x0];






polyintersec.m

function [x,y] = polyintersec(p1,p2)

p = polyadd(p1,-p2);

pzeros=roots(p);
I=imag(pzeros)==0;
x=pzeros(I);
disp(x)
y=polyval(p1,x);






polyextreme.m

function [xmax,ymax,xmin,ymin,xinfl,yinfl] = polyextreme(p)

p_d = polyder(p);
x_extrem = roots(p_d);
p_dd = polyder(p_d);
y_dd = polyval(p_dd,x_extrem);
xmax = x_extrem(y_dd < 0);
xmin = x_extrem(y_dd > 0);
ymax = polyval(p,xmax);
ymin = polyval(p,xmin);
xinfl = roots(p_dd);
yinfl = polyval(p,xinfl);







polyarea.m

function [A] = polyarea(x1,x2,p1,p2)

if nargin < 4 || isempty(p2),p2=0;end

p = polyadd(p1,-p2);

p_int=polyint(p);

p1= polyval(p_int,x1);
p2= polyval(p_int,x2);

A = polyadd(-p1,p2);
A = abs(A);





polylength.m

function [s] = polylength(x1,x2,p)

p1= inline ('sqrt(1+polyval(polyder(p),x).^2)','x','p');
s=quadl(p1,x1,x2,[],[],p);










spolyarea.m

%f=@(x)0.1.*x.^3-0.5.*x.^2+0.2.*x+0.55;
%x1=fzero(f,1.5);
%x2=fzero(f,4);

x = linspace(-1,6,100);


p1=[0.1,-0.7,1.4,-0.8];
p2=[-0.2,1.2,-1.35];


[x_inter,y_inter] = polyintersec(p1,p2);



e =sort(x_inter);
e_1=ceil(length(e)/2);


inter_mitte =e(e_1);
inter_letzte=e(end);


[A] = polyarea(inter_mitte,inter_letzte,p1,p2);
[s1] = polylength(inter_mitte,inter_letzte,p1);
[s2] = polylength(inter_mitte,inter_letzte,p2);
C=s1+s2;



x_1=linspace(inter_mitte,inter_letzte,100);
x_2=linspace(inter_letzte,inter_mitte,100);
p1_1=0.1.*x_1.^3-0.7.*x_1.^2+1.4.*x_1-0.8;
p2_1=-0.2.*x_1.^2+1.2.*x_1-1.35;
p2_1=fliplr(p2_1);
Y=[p1_1,p2_1];
X=[x_1,x_2];

p11=0.1.*x.^3-0.7.*x.^2+1.4.*x-0.8;
p22=-0.2.*x.^2+1.2.*x-1.35;

flaeche =['A = ' num2str(A)];
bogenlaenge=['C = ' num2str(C)];

figure
hold on;
plot(x,p11,'b');
plot(x,p22,'r');
fill(X,Y,[0.7 0.7 0.7]);
axis square
text(1,3,flaeche);
text(1,2.5,bogenlaenge);
xlabel('x');
ylabel('y');
title('Flaechenberechnung zwischen zwei Schnittpunkten');
hold off;








polykruemm.m

function [kappa,mx,my] = polykruemm(p,x)

p_d =polyder(p);
p_dd=polyder(p_d);

%Kappa:

zaehler= polyval(p_dd,x);
nenner = (1+(polyval(p_d,x).^2)).^(3/2);
kappa = abs(zaehler./nenner);

%Mittelpunkt des Schmiegekreises:

mx = x-((polyval(p_d,x).*(1+(polyval(p_d,x)).^2))./(polyval(p_dd,x)));

my = polyval(p,x)+(((1+(polyval(p_d,x)).^2))./(polyval(p_dd,x)));





kreis.m

function [x,y] = kreis(r,mx,my,phi)

x = mx + r .* cos(phi);
y = my + r .* sin(phi);






spolykruemm.m

p1 = [-0.2,1.2,-1.35];
x=linspace(-1,6,100);


[xmax] = polyextreme(p1);
[kappa,mx,my] = polykruemm(p1,xmax);


p = -0.2.*x.^2+1.2.*x-1.35;
phi=linspace(0,2.*pi,100);
r=1./kappa;
phi2=(5/4)*pi;
[x_circ,y_circ] = kreis(r,mx,my,phi);
[x_rad,y_rad] = kreis(r,mx,my,phi2);


plot(x,p,'b');
hold on;
plot(x_circ,y_circ,'r');
axis equal;
plot(mx,my,'rx');
plot([mx x_rad],[my y_rad],'k-');
xlabel('x');
ylabel('y');
title('Schmiegekreis an ein Polynom');
hold off;[addsig]