`R=a(log2(1+b*c/a*d))`

in above equation “a” and “b” are variables.

i write this equation in cvx but could not run.

is this equation ok for above?

`-rel_entr((a*d),((a*d)+(b*c)))/log(2)`

zaheer

If you tried putting in some “random” numbers for the variables, you would see that is not equivalent to your original formula.

`-rel_entr(a,a+b*c/d)/log(2)`

or `-1/d*rel_entr(a*d,a*d+b*c)/log(2)`

will work.

dear Mark,

if `R=B*alpha*log2(1+power*gama0*pathloss/alpha*distance)`

how i will write it in cvx, is it true or not as

`-rel_entr((alpha*distance),((alpha*distance)+(power*gama0*pathloss)))/log(2)`

??

if not plz suggest me another accurate equation.

moreover, alpha, power are variable in it. plz suggest me. thanks

If you do it that way, you need to divide `-rel_entr(...)`

by `distance`

.

Or instead, use

`-rel_entr(alpha,alpha+power*gama0*pathloss/distance)/log(2)`

, which is simpler.

And of course, you need to multiply `-rel_entr(....)`

by `B`

to get `R`

.

When making these reformulations, it is always a good idea to check by using random values (not special values such as 0 or 1) for the inputs to make sure the reformulation matches the original expression to within roundoff error. You should do that to make sure I didn’t make a mistake.

thanks, and B will be multiplied like this;

B(-rel_entr(alpha,alpha+power*gama0*pathloss/distance)/log(2))?

Yes. Or you can put the `B`

between `-`

and `rel_entr`

so as to avoid use of a pair or parentheses.

humble thanks dear Mark

Of course you need `* `

between `B`

and `rel_entr`

, which I neglected to mention in my previous post.

yes i used it, without * it does not work, thanks

Good morning Mark,

i did this

`-St_Data.B*rel_entr(alpha1,alpha1+Temp_N/Temp_D)/log(2)`

but got this

Error using * (line 41)

Inner matrix dimensions must agree.

Error in / (line 15)

z = mtimes( x, y, ‘rdivide’ );

whats the problem. even all the terms in above code line are 1x10, only B is scalar.

If `Temp_N`

and `Temp_D`

are both 1 by 10, you need `Temp_N./Temp_D`

Perhaps you need to brush up on basic MATLAB.

thanks Mark for kind advice

as i did this

Temp_N./Temp_D

this is the result

Error using .* (line 173)

Disciplined convex programming error:

Cannot perform the operation: {real affine} ./ {real affine}

Error in ./ (line 19)

z = times( x, y, ‘./’ );

i did this

times(Temp_N,Temp_D,‘./’)

to resolve error of (line19)

then found this

Error using .* (line 173)

Disciplined convex programming error:

Cannot perform the operation: {real affine} ./ {real affine}

now my question is how to resolve this issue of {real affine} ./ {real affine}.

thanks in advance

dear Mark i don’t know why this error come.

plz suggest me to resolve such issues, before this i also got much help from your comments regarding cvx.

thanks in advance

i have stuck at this point,

even i have checked all possible ways as i know

-1*inv_pos(Temp_D).*St_Data.B. rel_entr(alpha1,alpha1+Temp_N)/log(2)
but
Error using . (line 173)
Disciplined convex programming error:
Cannot perform the operation: {concave} .* {convex}

i’ll wait for your kind reply.

-St_Data.B*rel_entr((Temp_D),((Temp_D)+(Temp_N)))/log(2)

ans =

```
cvx concave expression (1x10 vector)
```

this type give me ok report, where Temp_D, Temp_N are 1x1o matrices while B is scalar.

what do you say it’s enough or i have to divide the whole term with Temp_D?

i show you my original equation to whome i have to code in cvx matlab.

where B is bandwidth, alpha, pk are decision variables, Hu is UAV altitude zu is UAV position, wk is user position. Plos_hat is pathloss which is constant here.

now please suggest me how to code in cvx matlab.

The formulation I provided earlier was valid based on what you said were the variables and constants. When you then showed an expression involving `Temp_D`

, I assumed it was a vector version of the earlier expression, and therefore `Temp_D`

is a constant, which it’s not. Hence the error message.

As for the expression in the most recent post, I have no reason to think it’s either concave or convex, due to the `(...)^(alpha/2)`

, which is an exponential. If that expression is concave, you need to prove it.

For your future reference, please note the requirements on the arguments of `rel_entr`

.

help rel_entr

```
rel_entr Scalar relative entropy.
rel_entr(X,Y) returns an array of the same size as X+Y with the
relative entropy function applied to each element:
{ X.*LOG(X./Y) if X > 0 & Y > 0,
rel_entr(X,Y) = { 0 if X == 0 & Y >= 0,
{ +Inf otherwise.
X and Y must either be the same size, or one must be a scalar. If X and
Y are vectors, then SUM(rel_entr(X,Y)) returns their relative entropy.
If they are PDFs (that is, if X>=0, Y>=0, SUM(X)==1, SUM(Y)==1) then
this is equal to their Kullback-Liebler divergence SUM(KL_DIV(X,Y)).
-SUM(rel_entr(X,1)) returns the entropy of X.
Disciplined convex programming information:
rel_entr(X,Y) is convex in both X and Y, nonmonotonic in X, and
nonincreasing in Y. Thus when used in CVX expressions, X must be
real and affine and Y must be concave. The use of rel_entr(X,Y) in
an objective or constraint will effectively constrain both X and Y
to be nonnegative, hence there is no need to add additional
constraints X >= 0 or Y >= 0 to enforce this.
```

ooh my dear Mark, i am exhausted now, and jammed.

i’ll check it next morning, what do you say how we will write it in matlab, as i am confused to do something.

thanks for your kind help ever.

i need your help too, for the solution of my data rate equation. if possible please guide me.