y'(x) = Alfa(x)uy(x) + Beta(x)x + y(x)
{ y(x0) = y0 = const
x należy do zbioru od [x0. xn]
pochodna to styczna na wykresie
jeżeli znamy punkt, prostą - styczną jako pochodną
pochodna to granica
y'(xi) = lim (h->0) z [(yi-yi-1)/h]
czyli y'(xi) = (y i+1 - yi)h
y(i+1) = yi + h*y(xi) (równanie to nazywamy metodą eulera
no i funkcja jest:
#include <iostream>#include <math.h>
using namespace std;
double alfa(double x){ return 1;}double beta(double x){
return 1;}
double gamma(double x){
return 0;}
double yprim(double x, double y){
return alfa(x)*y+beta(x)*x+gamma(x);
}
double ydok(double x){
return 2*exp(x) - x - 1;
}
int main(int argc, char** argv) {
int i, N; double x0, xN, y0, h, xi, yi ;
cout << "poczatek przedzialu "; cin >> x0;
cout << "koniec przedzialu "; cin >> xN;
cout << "warosc funkcji na poczatku przedzialu "; cin >> y0;
cout << "dokladnosc "; cin >> N;
xi = x0;
yi = y0;
h=(xN-x0)/N; for (i=1; i<=N; i++){
yi=yi+h*yprim(xi,yi);
xi+=h; cout << " xi = " << xi << " yi = " << yi << " ydok = " << ydok(xi) << " \n";
} return 0;
}
tylko czo to znaczy ;) ?
main dwa to ostatnia funkcja lolz w c++ oblicz reszte elementów potrzebnych czyli a (d juz jest) c i b
ale nie wiem jak konkretnie
1) zadania
pochodne całki cztery przykłady
pochodna zewnętrznej * pochodna wewnętrznej
wzór na pochodną iloczynu, ilorazu
(e^x)'' = ((e^x*lna)') = ((e^x*lna) * lna)
= lna*e^xlna * lna = lna^2 * e^xlna - takie rzeczy trzeba sobie powtórzyć
pochodna, druga pochodna i całka podwójna
S ydx
SS ydx^2 = S(Sydx)*dx = czyli całka z całki też to rozkminić
definicje pochodnych prawo stronnej, lewostronnej, centralnej
centralna
numeryczne przybliżenie drugiej pochodnej centralnej, ten trójkąt
jak deklarujemy tablicę zmiennych, jak deklarujemy zmienne w c++,d deklaracje funkcji, pętle for oraz if
//Przykład użycia tablic zmiennych -----------------
#include <iostream>
#include <conio.h>
const short WIELKOSC_TAB = 5;
//--------------------------------------------
int main()
{
using namespace std;
//Tworzenie tablic
int tab1[ WIELKOSC_TAB ]; //Tablica liczb
char tab4[ 2 ]; //Tablica znaków
//Przypisywanie wartości
tab1[ 0 ] = 1; //pierwszy element tabeli
tab1[ 1 ] = 2; //drugi element tabeli
tab1[ 2 ] = 3; //trzeci element tabeli
tab1[ 3 ] = 4; //czwarty element tabeli
tab1[ 4 ] = 5; //piąty element tabeli
//// zmienne
int main ()
{
// deklarowanie zmiennych:
int a, b;
int result;
// process:
a = 5;
b = 2;
a = a + 1;
result = a . b;
zadanie i jakis określony ciag kolejny wyraz to poprzedni powiększony o coś, program przy pomocy prostej pętli for obliczy wyrazy
for( int i = 1; i <= 10; i++ )
{
//Powtarzany blok instrukcji
}
#include<iostream>
using namespace std;
int ciag(int n)
{
if(n<2)
return -1;
return -ciag(n-1)*n-3;
}
int main()
{
int n;
cout<<"Podaj nr wyrazu ciągu, którego wartość chcesz policzyć: ";
cin>>n;
cout<<n<<" wyraz ciągu ma wartość "<<ciag(n)<<endl;
system("pause");
return 0;
}
#include<iostream>
#include<cstdlib>
using namespace std;
void fibonacci(int n)
{
long long a = 0, b = 1;
for(int i=0;i<n;i++)
{
cout<<b<<" ";
b += a; //pod zmienną b przypisujemy wyraz następny czyli a+b
a = b-a; //pod zmienną a przypisujemy wartość zmiennej b
}
}
int main()
{
int n;
cout<<"Podaj ile chcesz wypisać wyrazów ciągu fibonacciego: ";
cin>>n;
fibonacci(n);
system("pause");
return 0;
}
metoda eulera przybliżenie pochodnej y w kolejnym punkcie y[i+1] = y[i]+h*f(x[i],y[i]);
element poprzedni + wartość kroku + funkcja pochodnej przyjmujaca dwa argumenty
x[0] y[0] x[i] na podstawie dwóch kolejnych y dla kolejnego (robilismy na zajęciach) było 28
macierz
[ d1 c1 0 0 b2
a2 d2 c2 0 b2
0 a3 d3 c3 b3
0 0 a n dn ] bn
r2 = r2 - r1/d1
bi = bi - bi-1/di-1
a = a-b <=> a-=b;
bn = bn/dn
graniczna (ostatania funkcja)
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
double alfa(double x){
return x*x;
};
double beta(double x){
return x;
};
double gamma(double x){
return 1;
};
double f(double x){
return x*(x-2);
};
int main(int argc, char** argv) {
double uL, uP, l, h;
int N,i;
double x[1000],u[1000],d[1000],
a[1000],b[1000],c[1000];
/* deklaracja skończonej tablicy, ponieważ tablica o zmiennej ilosci bylaby bardzo trudna */
cout << "poczatek przedzialu ";
cin >> uL;
cout << "koniec przedzialu ";
cin >> uP;
cout << "ilosc krokow ";
cin >> N;
l=uP-uL;
h=l/(N+1);
x[0]=0;
for (int i=1; i<=N+1; i++){
x[i]=x[i-1]+h;
}
for (int i=1; i<=N; i++){
d[i]=(2/h)*alfa(x[i])+h*gamma(x[i]);
}
for (int i=2; i<=N; i++){
a[i] = -alfa(x[i])/h-0.5*beta(x[i]);
}
for (int i=1; i<=N-1; i++){
c[i] = -alfa(x[i])/h+0.5*beta(x[i]);
}
b[1]=uL*(alfa(x[1])/h+beta(x[1])/2)+h*f(x[1]);
for (int i=2; i<=N; i++){
b[i] = h*f(x[i]);
}
b[N]=uP*(alfa(x[N])/h-beta(x[N])/2);
for (int i=2; i<=N; i++){
b[i]-=b[i-1]/d[i-1];
d[i]-=c[i-1]/d[i-1];
}
b[N]/=d[N];
for (int i=N-1; i>=1; i--){
b[i]-=d[i+1]*c[i];
b[i]/=d[i];
}
for (int i=1; i<=N, i++;){
cout << x[i] << " " << b[i] << "\n";
}
return 0;
}