miejsce zerowe funkcji

0

Cześć wam, mam problem z zadaniem z programowania w języku C++, mój problem nie polega na tym że nie wiem jak je napisać bo być może wiem, tylko nie jestem w stanie zrozumieć co miał na myśli autor stosując np literkę "e" we wzorze funkcji. Jako że jestem początkujący w tej materii proszę o łagodne potraktowanie i ewentualną wskazówkę jak się za to zabrać pozdrawiam i liczę na pomoc Daniel.

Oto treść zadania:
Napisz program na obliczenie pierwiastka funkcji f(x) w przedziale <a, b> metodą bisekcji, gdzie:
f(x) = (e^(-1.5x)) -0.3x^2
a=0
b=1
Pierwiastek należy obliczyć z dokładnością ɛ

coś źle się formatuje zapis tej funkcji, -0.3x^2 odejmujemy od e^(-1.5x)

0

dzięki za wskazówkę :) (odnośnie forum)

0

nie jestem w stanie zrozumieć co miał na myśli autor stosując np literkę "e" we wzorze funkcji

http://pl.wikipedia.org/wiki/Podstawa_logarytmu_naturalnego ?

0

tak myślałem, potrzebowałem aby ktoś utweirdził mnie w tym przekonaniu, dziękuje :D

0

no i jestem z powrotem, znów potrzebuję pomocy, tym razem nie jestem w stanie zlokalizować błędu a to ponieważ program normalnie się uruchamia itp tylko przedwcześnie się wyłącza nie pokazując błędu, proszę o jakieś wskazówki gdzie może tkwić problem. Pozdrawiam
dodam tylko że kod nie jest jeszcze ukończony,

 
// ConsoleApplication1.cpp : Defines the entry point for the console application.

 
#include "stdafx.h"
#include <iostream>

#include <cmath>

#define M_E 2.71828182845904523536
/* wartość funkcji */

double wartosc(int x) {  // x czyli pobrane x lub y lub c do funkcji bisekcja

	double wynik = double (pow(M_E, (-1.5*x))) - 0.3*(double (pow(x, 2)));
	return wynik;
}
 
/*funkcja bisekcja*/

int metodab(int x, int y) {
	int c;
	if (wartosc(x) == 0) {
		return x;		
	}
	else {
		if (wartosc(y) == 0) {
			return y;
		}
		else {
			do {
				c = (x + y) / 2;
				if (wartosc(c) == 0) {
					return c;
				}
				else {
					if ((wartosc(x)*wartosc(c)) < 0) {
						y = c;
					}
					else {
						x = c;
					}
				}
			} while ((x - y) >= M_E);
			return c;
		}
	}
}



using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a, b;
	long double E;
	int choice;
	cout << "Podaj wartość przedziału" << endl;
	cin >> a;
	cin >> b;
	cout << "Podaj dokładość z jaką mam policzyć pierwiastek" << endl;
	cin >> E;
	cout << "Czy liczyć funkcją? 1/0" << endl;
	cin >> choice;
	if (choice == 1) {					// liczymy z funckją
		cout << "Miejsce zerowe funkcji to " << metodab(a, b) << endl;


	}
	else {								// liczymy bez funkcji


	}
	return 0;
}


} 
0

Bo tu sieci błąd na błędzie oraz błędem pogania.

  1. M_E jest zadeklarowane w <cmath> ale i tak go nie potrzebujesz
  2. double wartosc(double x) - to nie jest funkcja dyskretna
  3. return exp(-1.5*x)-0.3*x*x; - to jest zapis tej funkcji
  4. double metodab(double x, double y,double E) - musisz przekazać granicy oraz dokłądność
  5. } while ((x - y) < E); - podstawy się kłaniają, tu jest warunek zakończenia
  6. double a, b, E; - przedziały z całą pewnością nie dyskretne zaś błąd nie ma co trzymać dokładniejszy niż przedziały
  7. Jakieś zbędne klamry na końcu
  8. Bezsensowne else po if'ie z return'em
0

dziękuje :) co do M_E wiem że jest w cmath, nie wiem czemu ciagle był błąd że nie jest zadeklarowana, resztę posprawdzam, dzięki ;)

1

Btw: Nie ma żadnego M_E (ani M_PI i innych) w <math.h> albo <cmath>. Te stałe nie należą do standardu i są rozszerzeniami zależnymi od implementacji. Czasem są, czasem trzeba zrobić #define _USE_MATH_DEFINES przed dołączeniem nagłówków, a czasem ich po prostu nie ma.

Swoją drogą nie wiem dlaczego po prostu tego nie dodadzą, to cholernie przydatne a proste rzeczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1