I have a similar story: iPhone4S worked fine before upgrading to IOS7. Now I can't go more than 6-7 hours without the phone running out of juice. I'm an engineer, so I wanted to figure out what was causing the excessive battery drain. First, I tried all the normal battery-saving settings advocated out there on the web. No noticeable improvement doing the things everyone recommends. My phone was dropping about 12-15% of the charge every hour, so it was easy to determine if changes were having an impact (they weren't).
Long story short: in *my* case, the problem is related to the iPhone constantly waking up the Wi-Fi interface when the screen is locked and the phone is not being used. Every 10-11 seconds, the iPhone brings the Wi-Fi connection up (purpose still TBD), stays active for 3-4 seconds, and then shuts the interface down. This repeats every 10-11 seconds like clockwork, and basically drains my battery dry in 6-7 hours without me even touching it.
So if I either disable Wi-Fi, or tell the iPhone to "forget" the Wi-Fi networks that I've told it to use previously, it returns to it's normal battery life giving me a day of my typical usage.
If you want to see if this is your problem, the easiest way is to swipe up and disable Wi-Fi (or forget the Wi-Fi network(s) that you are using...that works just as well). If you want to see if your phone is constantly connecting to Wi-Fi when it's supposed to be 'sleeping', get it's IP address (in Settings -> Wi-Fi -> select the "i" (info) button for the wireless network you are connected to), then go to another PC and "ping" the IP address. If the iPhone is locked, the pings should time out (well, that's not entirely true...it wouldn't be unreasonable for the iPhone to wake up for a couple seconds every 10-15 minutes to check for updates, etc.). But it shouldn't stay awake, or in my case, wake up for 4 seconds (responding to pings during this time), sleeping for 6-7 seconds (pings will time out), and then repeating that over and over.
If you have a Windows machine, go to a command prompt and type "ping 192.168.1.55 -w 1000 -t" (where you use the IP address you found on your iPhone instead of the 192.168.1.55 sample I gave). That'll cause the PC to ping the iPhone every second (=1000 ms) continuously (the -t part). If the ping is successful, it means your phone is active on Wi-Fi at that instant. If it times out, then it's not.
I spent a couple hours this morning capturing the traffic that was being sent every 10-11 seconds, thinking I'd be able to track it to an application or setting on the iPhone. But alas, after looking at several network sniffer traces, and picking over several thousand packets, I've given up on decoding "the matrix". Nothing jumps out, but I'm certainly no Edward Snowden. I suspect that if I wipe my phone back to factory defaults, the problem will resolve itself. And that's actually my plan in another 3 weeks, when my new unlocked Nexus 5 arrives. This phone will be passed down to my daughter.