2016-07-13 2 views
-1

Я пытаюсь интегрировать пару уравнений, но программа не скомпилируется. Появившееся сообщение об ошибке говорит: «слишком много аргументов функции pow»Состав функций «pow» в C

Я покажу проблематичную часть кода, а затем задаю два конкретных вопроса.

#include <stdio.h> 
#include <math.h> 


struct Par{ 
    double gamma1, gamma2; 
} aa; 



void ecuaciones(int n, double v[], double dv[], double t){ 
dv[0]=v[6] ; 

dv[1]=v[7] ; 

dv[2]=v[8] ; 

dv[3]=v[9] ; 

dv[4]=v[10] ; 

dv[5]=v[11] ; 

dv[6]= aa.gamma1*(v[3]-v[0])*pow((pow(v[0]-v[3], 2)+pow(v[1]-v[4], 2)+pow(v[2]-v[5], 2)), -1,5) ; 

dv[7]= aa.gamma1*(v[4]-v[1])*pow((pow(v[0]-v[3], 2)+pow(v[1]-v[4], 2)+pow(v[2]-v[5], 2)), -1,5) ; 

dv[8]= aa.gamma1*(v[5]-v[2])*pow((pow(v[0]-v[3], 2)+pow(v[1]-v[4], 2)+pow(v[2]-v[5], 2)), -1,5) ; 

dv[9]= -aa.gamma2*(v[3]-v[0])*pow((pow(v[0]-v[3], 2)+pow(v[1]-v[4], 2)+pow(v[2]-v[5], 2)), -1,5) ; 

dv[10]= -aa.gamma2*(v[4]-v[1])*pow((pow(v[0]-v[3], 2)+pow(v[1]-v[4], 2)+pow(v[2]-v[5], 2)), -1,5) ; 

dv[11]= -aa.gamma2*(v[5]-v[2])*pow((pow(v[0]-v[3], 2)+pow(v[1]-v[4], 2)+pow(v[2]-v[5], 2)), -1,5) ; 

Итак ... проблема в dv's от 6 до 11. вопросов являются следующие:

Это нормально, чтобы использовать функцию «POW» в данном случае, или это только что определен для постоянных оснований? В случае, если да, это почти наверняка, тогда появляется следующее сомнение: Как я могу создать функцию pow с другим?

Для ясности, это то, что я хочу выразить, используя состав «POW» функций: enter image description here

Обратите внимание, что there's по крайней мере один способ, чтобы обойти эту проблему: что должен написать квадратные члены из базы в виде A * A = A вместо квадратов. Учитывая тот факт, что база может быть поднята до нецелочисленной власти, я считаю, что решение общего дела по-прежнему очень важно.

+0

Если я не считаю, что на моем миниатюрном экране планшета неправильно, то вложенный вызов pow() передается по 3 аргумента. –

+1

Должно ли '-1,5' быть' -1,5'? У вас не может быть 3 аргумента функции 'pow'. – thelaws

+0

Да, это была опечатка. Thx для вашего времени –

ответ

0

В этом случае нормально использовать функцию pow.

Вы получили сообщение об ошибке, поскольку ваши внешние функции pow имеют по три аргумента каждый, когда pow принимает только два аргумента.

pow((pow(v[0]-v[3], 2)+pow(v[1]-v[4], 2)+pow(v[2]-v[5], 2)), -1,5) 

упрощается

pow(some_number, -1, 5) 

Так что это должно быть исправлено, так что pow имеет основание и лишь показатель.

+0

О, я вижу ... на самом деле, если вы проверите изображение, которое я загрузил, оно должно было быть 3/2 = 1.5. Это была ошибка опечатки. –

+0

@ Gato Mazzei Не ожидайте, что ссылки на URL-адреса вне сайта будут использованы. Отправьте соответствующие данные здесь. – chux

2

Изменить все -1,5 по -1.5. Я предполагаю, что вы пытаетесь вычислить мощности до 3/2.

+0

Это исправлено. Благодаря! Stupid typo ... –

+0

Обратите внимание, что вы можете упростить 'pow (n, 2)' как 'double sqr (n) {return n * n; } ', а затем вы получите' pow (sqr (v [0] - v [3]) + sqr (v [1] - v [4]) + sqr (v [2] - v [5])), -1,5) '. Также обратите внимание, что 'pow (n, -1.5)' эквивалентно '1.0/(n * sqrt (n))'. –